《python_flask对数据库的操作》
第一步:下载数据库所需要的(Flask-SQLAlchemy)
Flask-SQLAlchemy是在Flask中操作关系型数据库的拓展。是以面向模型对象的形式操作数据库,通过迁移完成建表
安装:
#指定Flask-SQLAlchemy的版本为2.2 pip install Flask-SQLAlchemy==2.2 #指定Flask-MySQLdb的版本为0.2.0 pip install Flask-MySQLdb==0.2.0
完成之后就可以对数据库进行操作啦。
第二步:下载完成后配置基本的所需要的;
from flask_sqlalchemy import SQLAlchemy #配置类: class Config: # SQLALCHEMY_DATABASE_URI:用于连接的数据库 # 格式为:数据库://用户:密码@主机号:端口号/库名 SQLALCHEMY_DATABASE_URI = "mysql://root:1322@127.0.0.1:3306/taxes" # 追踪对象的修改并且发送信号(这需要额外的内存, 如果不必要的可以禁用它。) SQLALCHEMY_TRACK_MODIFICATIONS = False app = Flask(__name__) #加载配置类 app.config.from_object(Config) # 通过类`SQLAlchemy`来连接数据库 db = SQLAlchemy(app)
第三步:创建模型类
# 定义数据库模型并且继承于db.Model class User_form(db.Model): # 定义表名 __tablename__ = "user" #手动定义id主键(必要的一步!!) id = db.Column(db.Integer, primary_key=True) #定义字段String(字段长度) name = db.Column(db.String(64)) pwd = db.Column(db.String(64))
基础的命令:
# 删除表:没有实际意义,在学习的时候,可以保证每次的数据都是新的 db.drop_all() # 建表:会将继承自db.Model的类在数据库中映射出一张表 db.create_all()
过滤器:
filert() 按照条件查找
用法如下:
User.quer.filter(User.name == "XXX")
filter_by() 按照条件精确查找
用法如下:
User.query.filter_by(id=1)
执行器:
all() 返回查询到的所有结果,是一个列表
User.query.filter(User.name != 'wang').all()
first() 返回查询的第一个结果
User.query.filter(User.name != 'wang').first()
get() 返回主键对应的行
User.query.get(1)
count() 返回查询结果的数量
User.query.count()
paginate() 参数分别对应的是要查询的是第几页,每页几条数据,如果有错是否输出。
下方为一个应用中和的实例:
表间操作的实例:
1 from flask import Flask 2 from flask_sqlalchemy import SQLAlchemy 3 4 5 # 创建配置类启用DEBUG 6 class Config: 7 DEBUG = True 8 # 用于连接的数据库 URI (SQLALCHEMY_DATABASE_URI) 9 # 格式为:数据库://用户:密码@主机号:端口号/库名 10 SQLALCHEMY_DATABASE_URI = "mysql://root:1322@127.0.0.1:3306/book" 11 # 追踪对象的修改并且发送信号(这需要额外的内存, 如果不必要的可以禁用它。) 12 SQLALCHEMY_TRACK_MODIFICATIONS = False 13 14 15 app = Flask(__name__) 16 app.config.from_object(Config) 17 # 通过类`SQLAlchemy`来连接数据库 18 db = SQLAlchemy(app) 19 20 21 # 创建出版社的模型类 22 class Publishers(db.Model): 23 id = db.Column(db.Integer, primary_key=True) 24 name = db.Column(db.String(64)) 25 city = db.Column(db.String(64)) 26 # 建立与Book的关系 27 # to_book = db.relationship("Book") 28 # 反向建立与Book的关系 29 # to_book = db.relationship("Book", backref='pub_id') 30 31 32 # 创建图书的模型类 33 class Book(db.Model): 34 _tablename_ = "book" 35 id = db.Column(db.Integer, primary_key=True) 36 name = db.Column(db.String(64)) 37 # 创建一个键关联 38 p_id = db.Column(db.Integer, db.ForeignKey(Publishers.id)) 39 40 # 文本显示输出字段 41 def __repr__(self): 42 return "<Book:%s>" % self.name 43 44 45 # 创建作者的模型类 46 class Authors(db.Model): 47 id = db.Column(db.Integer, primary_key=True) 48 name = db.Column(db.String(64)) 49 sex = db.Column(db.String(64)) 50 age = db.Column(db.String(64)) 51 52 53 # 手动创建第三张表 54 class A_B(db.Model): 55 id = db.Column(db.Integer, primary_key=True) 56 book_id = db.Column(db.Integer, db.ForeignKey(Book.id)) 57 author_id = db.Column(db.Integer, db.ForeignKey(Authors.id)) 58 59 60 @app.route("/") # 写入路由 61 def index(): # 定义视图 62 # '''' 63 # 单表操作: 64 # '''' 65 # 存入新的图书添入新的name,和关联的p_id 66 # new_name = Book(name="你好李焕英2", p_id=1) 67 # db.session.add(new_name) 68 # db.session.commit() 69 70 # 删除找到的第一个 71 # res = Book.query.filter_by(name="你好李焕英2").first() 72 # db.session.delete(res) 73 # db.session.commit() 74 75 # 修改找到的第一个 76 # res = Book.query.filter_by(name="你好李焕英2").first() 77 # res.name = "龙虎谈" 78 # db.session.commit() 79 80 # 查找书名叫xxx的数据方法1 81 # res = Book.query.filter(Book.name == "你好李焕英2").first() 82 # print(res) 83 84 # 查找书名叫xxx的数据方法2 85 # res = Book.query.filter_by(name="你好李焕英2").first() 86 # print(res) 87 88 # 找到第一串数据 89 # res = Book.query.first() 90 # print(res) 91 92 # 找到xxx表中的所有数据 93 # res = Book.query.all() 94 # print(res) 95 96 # 多表操作 97 98 # 通过出版社查找书籍 99 # 列1: 100 # pub_obj = Publishers.query.filter(Publishers.name == "人民出版社").first() 101 # res = pub_obj.to_book 102 # print(res) 103 # 列2: 104 # pub_obj = Publishers.query.filter(Publishers.name == "出版社1").first() 105 # res = pub_obj.to_book 106 # print(res) 107 108 # 通过书籍查找出版社 109 # book_obj = Book.query.filter(Book.name == "你好李焕英2").first() 110 # res = book_obj.pub_id 111 # print(res) 112 113 # 通过书籍查找多个出版社 114 # book_obj = Book.query.filter(Book.name == "你好李焕英2").all() 115 # for i in book_obj: 116 # i = i.pub_id 117 # print(i) 118 return "成功" 119 120 121 if __name__ == '__main__': # 写入主函数 122 db.create_all() 123 # db.drop_all() 124 app.run()

浙公网安备 33010602011771号