《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()
表间操作

 

posted @ 2021-09-16 15:39  enken  阅读(248)  评论(0)    收藏  举报