本章介绍Tornado连接Mysql数据库和一些简单的Sql语句,使用的工具是pymysql 关于pymysql驱动的学习 推荐菜鸟教程 关于包的安装使用pip安装,因为这是python3的包。我用的编辑器是sublime Text3当然vscode、pycahrm都可以,不影响学习。
在开始之前不知道大家对mysql的操作熟悉了没有,接下来我们会涉及两个table,一个users,一个classes,users我们在安装mysql的时候已经建过了,接下来我们来建classes。
一、战前准备,添加表格
1、首先打开Navicat,连接到数据库,增加表classes,添加下面的字段
2、然后,为了增加难度 ,我们在users表中增加外键
3、增加外键约束
二、开始写代码
1、创建一个空文件夹,名字随你命名,它将是我们的工程目录。我是在D盘根目录下创建了study。
2、在此目录下创建main.py文件和空文件夹handler,接下来我们用编辑器打开此目录。
3、在handler目录下创建userhandler.py,classhandler.py这个文件是我们写关于用户的请求的函数。关于什么是handler直接理解为处理url即可。下面是当前的目录结构
4、开始进入代码编写,首先在classhandler.py中写入下面代码,写一个新建班级的类,也就是新建班级的请求:
import tornado.web # 导入tornado模块
import pymysql #导入连接mysql的驱动模块
# 这是一个处理新建班级的请求类,继承tornado.web.RequestHandler
class NewClassHandler(tornado.web.RequestHandler):
# 配置请求头,允许跨域,否者在浏览器调用的时候报错误
def set_default_headers(self):
self.set_header("Access-Control-Allow-Origin", "*")
self.set_header("Access-Control-Allow-Headers", "Content-Type")
self.set_header("Access-Control-Allow-Methods", "POST,GET,OPTIONS")
# 这个函数是必要的,有些浏览器或者测试工具在访问之前都会预先访问,你不写的话会导致出错的
def options(self):
self.finish()
# 重写post请求函数,处理post请求
def post(self):
# 为了防止出错导致程序崩溃,我们需要捕获异常函数,并处理
try:
# 从请求中获取参数,如果获取不到,我们赋值 None
classname = self.get_argument('classname', None)
# 对传入的参数进行判断,如果为空我们回复 error,并终止执行下去
if not classname:
# self.write()函数的参数为标准的json类型
self.write({"error":"班级名称为空!"})
return
# 如果不为空那么开始访问数据库吧
# 首先是sql语句
sql = "insert into classes(classname) values('{0}')".format(classname)
# 创建连接对象,相应的参数 意思依次为 主机ip 端口 数据库用户名 数据库用户密码 数据库名称
conn = pymysql.connect(host='x.x.x.x', port=3306, user='root', passwd='root', db='test')
# 创建连接游标,用于读写数据库
cursor = conn.cursor()
# 执行sql语句,并返回影响行数
effect_row = cursor.execute(sql)
# 提交数据
conn.commit()
# 关闭游标和连接
cursor.close()
conn.close()
# 插入成功 那么影响函数是1
if effect_row>0:
self.write({"success":"插入班级信息成功"})
else:
self.write({"error":"插入班级信息失败"})
except Exception as e:
# 如果出现异常我们打印出来
print(e)
5、我们在main.py中写main函数,启动函数,明确指向路由的路径和端口等参数配置
import sys
# 将handler目录下的文件放到和main.py文件同级目录下,便于我们引用
sys.path.append("./handler")
# 添加必要的tornado的模块
import tornado.ioloop
import tornado.web
# 从classhandler.py文件中导出写好的 类
from classhandler import NewClassHandler
# 写程序入口函数 main函数
def main():
# 定义请求的路径和响应的请求类,此类会根据你发出的请求区分get 还是post而给予不同的处理
application = tornado.web.Application([(r"/class/new", NewClassHandler)])
# 绑定端口,单进程启动
application.listen(8000)
tornado.ioloop.IOLoop.instance().start()
if __name__ == "__main__":
main()
三、下面我们来测试一下
1、首先执行主程序,也就是main函数
执行命令,因为我的是python2、python3双环境,因此python3代表python3.6你们如果单环境,就是python命令
2、调用请求
首先打开测试接口的工具,我用的是postman 很强大的测试工具
如果我们传入空参数会如何呢?
这款工具的强大之处是可以查看代码,点击图中的Code即可查看不同语言的请求代码
接下来我们看看数据有没有数据
ok访问数据到此结束,接下来在下一章节我们来完善吧,因为我们不仅要学会插入还会更新 删除 查询