Tornado数据库与表单操作
Tornado数据库与接口一、Tornado数据库的操作tornadotorndb是torndb携带的一个数据库操作工具,但是对python3的支持还是有问题,我们在这里做了一个简单了解二、torndb使用安装torndbpip install torndb安装pymysqlpip install pymysql修改源代码:在虚拟环境site- packages包打开torndb.py模块文件Ct
Tornado数据库与接口
一、Tornado数据库的操作
-
tornado
torndb是torndb携带的一个数据库操作工具,但是对python3的支持还是有问题,我们
在这里做了一个简单了解
二、torndb使用
-
安装torndb
pip install torndb
-
安装pymysql
pip install pymysql
-
修改源代码:
在虚拟环境site- packages包打开torndb.py模块文件
Ctrl+r 将所有的MySQLdb 改成pymsyql
Ctrl+f 搜索源代码修改
# return [Row(itertools.izip(column_names, row)) for row in cursor] return [Row(itertools.zip_longest(column_names, row)) for row in cursor] # CONVERSIONS[field_type] = [(FLAG.BINARY, str)] + CONVERSIONS[field_type] CONVERSIONS[field_type] = [(FLAG.BINARY, str)].append(CONVERSIONS[field_type]) # max_idle_time=7 * 3600, connect_timeout=0, max_idle_time=7 * 3600, connect_timeout=10,
-
使用torndb
""" 使用torndb完成数据库数据的操作 1、连接 2、执行sql 3、关闭 """ # 导入包 import torndb # 连接 my_conn = torndb.Connection( host="127.0.0.1", database="dailyfresh", user="root", password="root" ) # 执行sql-查询一条数据 result = my_conn.get("select * from goods where id=1") print(result) # 执行sql-查询多条数据 results = my_conn.query("select * from goods where id<10") print(results) # 关闭 my_conn.close()
三、Tornado SQLAlchemy
上面的方法可以实现数据库操作,但是有些复杂,类似于PyMySQL模块操作,不如ORM使用方便,那
么下面来开以下 Tornado ORM操作
-
安装sqlalchemy
pip install sqlalchemy
-
安装pymysql
pip install pymysql
-
创建数据库测试
# 导入包 from sqlalchemy import create_engine, Column, String, Integer, Float, Date from sqlalchemy.ext.declarative import declarative_base import pymysql import os # mysqldb和pymysql版本 pymysql.install_as_MySQLdb() # 项目的路径 base_dir = os.path.dirname(__file__) # sqlite的路径 db_path = "sqlite:///" + os.path.join(base_dir, "db.sqlite") # 创建核心对象engine engine = create_engine( db_path, # 数据库的路径 encoding="utf-8", # 编码格式 echo=True, # 将sql语句显示到控制台 ) # 创建实体类的基类 Base = declarative_base(engine) # 实体类 class Car(Base): """实体类-汽车""" __tablename__ = "car" # 数据库表名 id = Column(Integer, primary_key=True, autoincrement=True) # 主键id name = Column(String(64)) # 车型号名称 nowprice = Column(Float) # 现在的价格(万) oldprice = Column(Float) # 原来的价格(万) km = Column(Float) # 公里数(万) city = Column(String(64)) # 车辆所在城市 buydate = Column(Date) # 车辆购买时间 year = Column(Integer) # 保修年数 day = Column(Integer) # 可退天数 if __name__ == '__main__': # 删除表,创建表 # Base.metadata.drop_all() Base.metadata.create_all()
-
封装
class BaseMode(Base): """实体类-包装基类""" __abstract__ = True # 抽象类,不会转成表 id = Column(Integer, primary_key=True, autoincrement=True) # 主键id def save(self): """新增""" session = Session() session.add(self) session.commit() session.close() def delete(self): """删除""" session = Session() session.delete(self) session.commit() session.close() def update(self): """更新""" session = Session() session.add(self) session.commit() session.close()
-
增删改查
def insert2(): # 创建对象 car = Car(name="奔驰S320", nowprice=22.2, oldprice=25.5, km=8.5, city="广州市", buydate=datetime.strptime("2015-2-10", "%Y-%m-%d"), year=2, day=30) # 新增 car.save() def delete(): """删除""" # 1、删除 session = Session() car = session.query(Car).get(1) print(car) session.close() # 2、删除 car.delete() def update(): """修改""" # 1、查询 session = Session() car = session.query(Car).get(1) session.close() # 2、修改 print(car.name) car.name = "xxx" car.update() def select(): """查询""" session = Session() # 1、查询单个 car = session.query(Car).get(1) print(car) car_list = session.query(Car).filter(Car.name.like("%宝马%")) # query对象,打印,转成str,就是对应的sql语句 print(car_list, type(car_list)) # 2、查询含有宝马的 car_list = session.query(Car).filter(Car.name.like("%宝马%")).all() print(car_list) # 3、查询含有宝马的总价格 ret = session.query(Car, func.sum(Car.nowprice)).filter(Car.name.like("%宝马%")).all() print(ret) ret = session.query(Car).filter(Car.name.like("%宝马%")).with_entities(func.sum(Car.nowprice)).all() print(ret) session.close()
四、基于ORM的结构修改成模块化
随着ORM的加入,项目代码越发的复杂,需要尝试进行项目的结构调整了
app.py是整个项目的起始,负责创建数据库引擎和服务
manage.py 是控制启动文件
models.py 是数据库模型文件
settings.py是配置文件
urls.py是路由文件
views.py 是视图文件
五、Tornado表单操作
-
Tornado请求管理
和Django,Flask一样,Tornado也有对前端请求数据进行处理的方法
属性名 说明 method http请求方法 url 客户请求的完整uri地址 path Url当中的路径 version http版本 headers http headers 字典格式 body http请求内容部分 字符串格式 remote_ip 客户端ip protocol 请求的协议 http/https host 请求的主机 arguments 客户端提交的参数 files 客户端上传的文件 -
总结:
1、普通表单数据,
获取方式:
self.get_argument("name") # 单个值
self.get_arguments("hobby") # 集合
2、非表单,json格式的字符串做为请求体发来的数据#获取发来的json格式的字符串,非普通表单数据
import json
#获取
data_str = self.request.body.decode("utf-8")
#转字典
data_dict = json.loads(data_str)
更多推荐
所有评论(0)