小言_互联网的博客

tornado 入门之(MySQL+Pymysql)酱酱仙的博客【5】

328人阅读  评论(0)

tornado 入门之(MySQL+Pymysql 创建表、删除表、数据的增、删、改、查)酱酱仙的博客【5】


连接数据库的准备

  • 安装pymysql
pip install pymysql
  • 安装 SQLAlchemy
pip install sqlalchemy

客户端连接mysql,问题:1251 client does not support …

解决方法 https://blog.csdn.net/u012604745/article/details/80632860

创建项目

添加模板模型静态等文件

连接数据库步骤

创建模型modules.py

from sqlalchemy import Column,Integer,String
from utils.conn import Base
def creat_db():
    # 映射模型对应的表
    Base.metadata.create_all()
def drop_db():
    # 删除模型对应的表
    Base.metadata.drop_all()
class Student(Base):
    id = Column(Integer,primary_key=True,autoincrement=True)
    s_name = Column(String(10),unique=True,nullable=False)  # nullable可空的 unique 独一无二
    s_age = Column(Integer,default=18)

    __tablename__ = 'student'

连接数据库代码conn.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

#   数据库格式
db_url = 'mysql+pymysql://root:123456@127.0.0.1:3306/tornado9'

#   创建引擎
engine = create_engine(db_url,echo=True)
# create_engine方法返回一个Engine实例,Engine实例只有直到触发数据库事件时才真正去连接数据库。
# echo参数是设置 SQLAlchemy 日志记录,这通过 Python 的标准logging模块的快捷方式。启用它,我们会看到产生的所有生成的 SQL,sqlalchemy与数据库通信的命令都将打印出来

#   模型与数据库表进行关联的基类,模型必须继承于Base
Base = declarative_base(bind=engine)

#   创建session会话
DbSession = sessionmaker(bind=engine)
session = DbSession()

路由配置manage.py

import os
import tornado.web
import tornado.ioloop
from app.views import MainHandler, DBHandler, DropDBHandler, AddStuDBHandler, StuDBHandler

def make_app():
    return tornado.web.Application(handlers=[
        (r'/', MainHandler),
        (r'/init_db', DBHandler),      # 创建表
        (r'/drop_db', DropDBHandler),  # 删除表
        (r'/add_stu', AddStuDBHandler),# 添加数据 分单数据加入、多数据加入
        (r'/stu_db', StuDBHandler),    # 数据操作 增、删、改、查
    ],
        template_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'templates'),
        static_path=os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static')
    )

if __name__ == '__main__':
    app = make_app()
    app.listen(8080)
    tornado.ioloop.IOLoop.current().start()

功能实现views.py

import tornado.web
from app.models import creat_db, drop_db, Student
from utils.conn import session
from sqlalchemy import not_,or_,and_

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello day02!")

class DBHandler(tornado.web.RequestHandler):
    def get(self):
        creat_db()
        self.write('创建表成功')

class DropDBHandler(tornado.web.RequestHandler):
    def get(self):
        drop_db()
        self.write('删除表成功')

class AddStuDBHandler(tornado.web.RequestHandler):
    def post(self):
        # 创建单个数据
        # stu = Student()
        # stu.s_name = '仙仙'
        # session.add(stu)
        # session.commit()
        # 创建多条数据,通过列表
        stus = []
        for i in range(10):
            stu = Student()
            stu.s_name = '仙仙_%s' %i
            stus.append(stu)
        session.add_all(stus)
        session.commit()
        self.write('添加数据')

class StuDBHandler(tornado.web.RequestHandler):
    def get(self):
        session.query(Student).filter(Student.s_name == '仙仙_0').all()
        self.write('查询数据')
    def post(self):
        stu = Student()
        stu.s_name = '仙仙'
        session.add(stu)
        session.commit()
        self.write('添加数据')
    def delete(self):
        session.query(Student).filter(Student.s_name == '仙仙_1').delete()
        session.commit()
        self.write('删除数据')
    def patch(self):    # 修改部分属性
        #方式一
        # stu = session.query(Student).filter(Student.s_name == '仙仙').first()
        # stu.s_name = '小仙仙'
        # session.add(stu)
        # session.commit()
        #方式二
        session.query(Student).filter(Student.s_name == '小仙仙').update({'s_name':'大仙仙'})
        session.commit()
        self.write('修改数据')

web访问127.0.0.1:8080/init_db 创建表


postman 进行 post请求 加入数据


修改数据



工具代码打包
https://download.csdn.net/download/qq_39610398/11832429


转载:https://blog.csdn.net/qq_39610398/article/details/102070303
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场