Flask操作数据库:
需要提前安装:flask_sqlalchemy,(pip install flask_sqlalchemy)如果连接的是mysql数据库,需要安装mysqldb驱动;(pip install flask_mysqldb)
一对多:
代码如下:
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy class Config(object): """项目配置类""" # 连接数据库 # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称 SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/py18" # 跟踪数据库修改操作 SQLALCHEMY_TRACK_MODIFICATIONS = True # 1:创建app对象app = Flask(__name__)# 加载项目配置app.config.from_object(Config)# 创建数据库对象db = SQLAlchemy(app) # 定义数据库表模型类class User(db.Model): # 设置表名称,不设置默认为类名的小写字母(user) __tablename__ = "users" # 定义字段 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) # role = Role() # role.users:该角色下有哪些用户 # user=User() # user.roles:该用户属于那种角色 # 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询 roles = db.relationship("Role", backref="users") def __repr__(self): """自定义格式化输出""" return "Role: %s %s" % (self.id, self.name) # 自定义数据库表的模型类:db.Modelclass Role(db.Model): __tablename__ = "role" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) # 定义外键 role_id = db.Column(db.Integer, db.ForeignKey(User.id)) def __repr__(self): return "User:%s %s" % (self.id, self.name) @app.route("/")def hello_world(): return "hello world!" if __name__ == ‘__main__‘: # 删除所有表 db.drop_all() # 创建所有表 db.create_all() app.run(debug=True)
多对多:
代码如下:
from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy class Config(object): """项目配置类""" # 连接数据库 # mysql://数据库的账号:密码/数据库ip地址:端口号/数据库名称 SQLALCHEMY_DATABASE_URI = "mysql://root:[email protected]:3306/py18" # 跟踪数据库修改操作 SQLALCHEMY_TRACK_MODIFICATIONS = True # 1:创建app对象app = Flask(__name__)# 加载项目配置app.config.from_object(Config)# 创建数据库对象db = SQLAlchemy(app) # 定义第三张表tb_user_role = db.Table("tb_user_role", db.Column("user_id", db.Integer, db.ForeignKey("user.id")), db.Column("role_id", db.Integer, db.ForeignKey("role.id")) ) # 定义数据库表模型类class User(db.Model): # 设置表名称,不设置默认为类名的小写字母(user) __tablename__ = "user" # 定义字段 id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) # role = Role() # role.users:该角色下有哪些用户 # user=User() # user.roles:该用户属于那种角色 # 定义关系字段relationship,这个字段在数据库是不存在的,只是为了方便查询 # TODO 添加第三张表 # secondary 指明第三张表, lazy提高性能,值返回结果对象,需要获取数据时需要".all()"才会展示出来 roles = db.relationship("Role", backref="user", secondary=tb_user_role, lazy="dynamic") def __repr__(self): """自定义格式化输出""" return "Role: %s %s" % (self.id, self.name) # 自定义数据库表的模型类:db.Modelclass Role(db.Model): __tablename__ = "role" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) # 定义外键 role_id = db.Column(db.Integer, db.ForeignKey(User.id)) def __repr__(self): return "User:%s %s" % (self.id, self.name) @app.route("/")def hello_world(): return "hello world!" if __name__ == ‘__main__‘: # 删除所有表 db.drop_all() # 创建所有表 db.create_all() app.run(debug=True) //////////////////////////////////////////////////////////数据常用查询操作
from flask_sqlalchemy import SQLAlchemyfrom flask import Flaskfrom sqlalchemy import not_, and_, or_ class Config(object): """项目配置类""" SQLAlCHEMY_DATABASE_URI = "mysql://root:[email protected],1:3306/test18" SQLALCHEMY_TRACK_MODIFICATIONS = True app = Flask(__name__)app.config.from_object(Config)db = SQLAlchemy(app) class Role(db.Model): """角色表""" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) users = db.relationship("User", backref="role") def __repr__(self): return "Role:%s %s" %(self.id, self.name) class User(db.Model): id= db.Column(db.Integer, primary_key=True) name = db.Column(db.String(128), unique=True) email = db.Column(db.String(64)) password = db.Column(db.String(64)) # 定义外键 role_id = db.Column(db.Integer, db.ForeignKey(Role.id)) def __repr__(self): return "User:%s %s %s %s" %(self.id, self.name, self.email, self.role_id) @app.route("/")def hello_world(): return "hello world" if __name__ == ‘__main__‘: # 删除所有表 db.drop_all() # 创建所有表 db.create_all() # 单次插入数据 ro1 = Role(name="admin") ro2 = Role(name="user") db.session.add_all([ro1, ro2]) db.session.commit() us1 = User(name=‘wang‘, email=‘[email protected]‘, password=‘123456‘, role_id=ro1.id) us2 = User(name=‘zhang‘, email=‘[email protected]‘, password=‘201512‘, role_id=ro2.id) us3 = User(name=‘chen‘, email=‘[email protected]‘, password=‘987654‘, role_id=ro2.id) us4 = User(name=‘zhou‘, email=‘[email protected]‘, password=‘456789‘, role_id=ro1.id) us5 = User(name=‘tang‘, email=‘[email protected]‘, password=‘158104‘, role_id=ro2.id) us6 = User(name=‘wu‘, email=‘[email protected]‘, password=‘5623514‘, role_id=ro2.id) us7 = User(name=‘qian‘, email=‘[email protected]‘, password=‘1543567‘, role_id=ro1.id) us8 = User(name=‘liu‘, email=‘[email protected]‘, password=‘867322‘, role_id=ro1.id) us9 = User(name=‘li‘, email=‘[email protected]‘, password=‘4526342‘, role_id=ro2.id) us10 = User(name=‘sun‘, email=‘[email protected]‘, password=‘235523‘, role_id=ro2.id) db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10]) db.session.commit() # 查询所有用户数据 User.query.all() # 查询有多少个用户 User.query.count() # 查询id为4的用户[3种方式] User.query.get(4) # filter_by精确查询 User.query.filter_by(id=4).first() User.query.filter(User.id == 4).first() # 查询名字结尾字符为g的所有数据[开始startswith/包含contains] User.query.filter(User.name.endswith("g")).all() User.query.filter(User.name.contains("g")).all() # 查询名字不等于wang的所有数据[2种方式] User.query.filter(User.name != "wang").all() User.query.filter(not_(User.name == "wang")).all() # 查询名字和邮箱都以"li"开头的所有数据[2种方式] User.query.filter(User.name.startswith(‘li‘), User.email.startswith(‘li‘)) User.query.filter(and_(User.name.startswith("li"), User.email.startswith("li"))) # 查询password是"123456"或者"email"以"itheima.com"结尾的邮箱 User.query.filter(or_(User.password == "123456", User.email.endswith("itheima.com"))) # 查询id为[1,3,5,7,9]的用户列表 # 使用in_()包含函数 User.query.filter(User.id in([1,3,5,7,9])).all() # 查询name为liu的数据 User.query.filter(User.name =="liu").first() # 查询所有用户数据,并以邮箱降序排列 User.query.filter(User.email.desc()).all() # 将所有数据分页,每页3个,查询第二页的数据 # 参数1:第几页的数据, 参数2:每页多少条数据 paginate = User.query.paginate(2, 3) # 获取当前页面所有数据 paginate.items # 获取当前页码 paginate.page # 获取总页数 paginate.pages app.run(debug=True)
原文地址:https://www.cnblogs.com/zhouzetian/p/9692424.html
时间: 2024-11-10 20:03:47