一、使用torndb模块链接mysql数据库
1. 下载 pymysql模块
pip install pymysql==0.9.3
torndb 模块链接mysql数据库:torndb 中封装了MySQLDB,但是MySQLDB不能使用了。需要依赖于pymysql。
2. 下载torndb
pip install torndb
3. 链接mysql数据库
import torndb
# 1.连接数据库
db = torndb.Connection(
host='127.0.0.1',
database='tn01',
user='root',
password='root'
)
# 2.简单查询
result = db.query('select * from person')
print(result)
# 3.关闭连接
db.close()
)
注意:在运行时会出错,修改源代码
(1)报错:torndb模块默认依赖MySQLdb模块

错误1.png
解决方案:将源代码中的所有MySQLdb换成pymysql
(2)修改链接超时时间

修改2.png
(3)将 “+” 修改为 append()

修改3.png
修改为:

修改结果.png
(4)将 izip 修改为 zip_longest

修改前.png

修改后.png
修改成功后运行结果展示:

结果截图.png
4. 结合tornado使用
import tornado.ioloop
import tornado.web
import torndb
class IndexDemo(tornado.web.RequestHandler):
def initialize(self):
# 连接数据库
self.db = torndb.Connection(host='127.0.0.1', database='tn01', user='root', password='root')
def get(self):
result = self.db.query('select * from person')
print(result)
self.write('ok')
def on_finish(self):
self.db.close()
if __name__ == '__main__':
app = tornado.web.Application(
[
('/index/', IndexDemo),
],
template_path='templates', # 指定盛放模板文件的目录
static_path='static', # 告诉tornado 静态目录
static_url_prefix='/static/' # 浏览器访问时的url
)
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
二、使用SQLAlchemy操作数据库
上面的方法可以实现数据库操作,但是有些复杂,不如ORM使用方便,使用SQLAlchemy模块可以使用ORM进行数据操作。
1. 安装SQLAlchemy 模块
pip install SQLAlchemy
2. 使用sqlalchemy创建数据库表格
import os
import sqlalchemy
# 进行表和核心关联的方法
from sqlalchemy.ext.declarative import declarative_base
# 1.连接数据库
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
path = 'sqlite:///' + os.path.join(BASE_DIR, 'db.sqlite3')
# 2.创建数据库连接核心,负责连接数据库
engine = sqlalchemy.create_engine(path, # 数据库的配置
encoding='utf-8', # 数据库的编码
echo=True # 保持输出
)
# 3.创建基类
Base = declarative_base(bind=engine)
# 4.创建模型类,继承基类
class Car(Base):
__tablename__ = 'car'
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
c_name = sqlalchemy.Column(sqlalchemy.String(32))
c_price = sqlalchemy.Column(sqlalchemy.Integer)
# 5.创建表格
if __name__ == '__main__':
Base.metadata.create_all()
5.代码封装

封装代码.png
(1)settings.py
# 配置文件
import os
# 数据库配置
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
path = "sqlite:///" + os.path.join(BASE_DIR, 'tn.sqlite3')
# tornado参数配置
tornado_config = {
'template_path': 'templates',
'static_path': 'static',
'static_url_prefix': '/static/',
'debug': True
}
(2)models.py
# 数据库
import sqlalchemy
from settings import path
# 表和核心关联的方法
from sqlalchemy.ext.declarative import declarative_base
# 创建查询对象
from sqlalchemy.orm import sessionmaker
# 创建数据库核心,连接数据库
engine = sqlalchemy.create_engine(path, encoding='utf8', echo=True)
# 创建基类
Base = declarative_base(bind=engine)
# 创建数据库执行的类
Session = sessionmaker(bind=engine)
# 实例化数据库的游标
session = Session()
# 封装
class BaseModel(Base):
__abstract__ = True
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
def save(self):
session.add(self)
session.commit()
def delete(self):
session.delete(self)
session.commit()
def update(self):
session.commit()
class Car(BaseModel):
__tablename__ = 'car'
c_name = sqlalchemy.Column(sqlalchemy.String(32))
c_price = sqlalchemy.Column(sqlalchemy.Integer)
(3)views.py
import tornado.web
from models import Car
class IndexHandler(tornado.web.RequestHandler):
def get(self):
car_obj = Car(c_name='五菱宏光', c_price=50000)
car_obj.save()
self.render('index.html')
(4)urls.py
from views import *
urlpatterns = [
(r"/index/", IndexHandler)
]
(5)app.py
# 创建application 对象
import tornado.web
from urls import urlpatterns
from settings import tornado_config
def make_app():
app = tornado.web.Application(
urlpatterns,
# 解析字典:配置信息
**tornado_config
)
return app
(6)manage.py
# 启动项目
import tornado.ioloop
from app import make_app
from models import Base
if __name__ == '__main__':
# 1.创建数据库
Base.metadata.create_all()
# 2.监听端口号
app = make_app()
app.listen(8888)
# 3.启动项目
tornado.ioloop.IOLoop.current().start()

插入数据、查询数据举例.png
3. 前端请求数据处理
class Index1Handler(tornado.web.RequestHandler):
def get(self):
# http请求方法
print(self.request.method)
# 客户请求的uri地址
print(self.request.uri)
# 完整的url
print(self.request.full_url)
# uri当中的路径
print(self.request.path)
# http版本
print(self.request.version)
# http headers请求头字典格式
print(self.request.headers)
# http请求的内容,字符串格式
print(self.request.body)
# 客户端ip
print(self.request.remote_ip)
# 请求的协议 http/https
print(self.request.protocol)
# 请求的主机
print(self.request.host)
# 客户端提交的参数
print(self.request.arguments)
# 客户端请求的文件
print(self.request.files)
self.write('请求')

部分请求结果截取.png