Flask使用SQLAlchemy操作数据库

在web开发中,数据库是必要的工具,在我们flask里面,可以使用flask-SQlAlchemy对数据库进行连接和CRUD的操作。

开发工具:pycharm,pip,flask,flask_sqlalchemy,mysql数据库

准备:用pycharm的Project Interpret或者安装 pip 来安装需要的模块

首先在mysql里面新建一个名为DB_demo的数据库,在flask的基本框架上,新建一个配置文件config.py,:

# encoding:utf-8
DIALECT = 'mysql'
DRIVER = 'MYSQLdb'
USERNAME = 'root'
PASSWORD = 'root'
HOST = 'localhost'
PORT = '3306'
DATABASE = 'DB_demo'
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DIALECT,DRIVER,USERNAME,PASSWORD,HOST,PORT,DATABASE)
SQLALCHEMY_TRACK_MODIFICATIONS = True

 然后在主文件里面先导入相应的模块,连接配置文件,配置数据库对象,准备工作完毕后,定义数据库模型对象,这里我用的是图书管理系统的模型,一个用户表,一个图书表

from FlaskDemo.SQL外键约束与查找 import config
app = Flask(__name__)  
app.config.from_object(config)  #连接config文件
db = SQLAlchemy(app)  # 设置db模型对象为app
class User(db.Model):
    __tablename__ = "user"  # 表名
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 设置id为主键,自增模式
    username = db.Column(db.String(100), nullable=False)  # 用户名不为空

class Book(db.Model):
    __tablename__ = "book"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)  # 书号
    title = db.Column(db.String(100), nullable=False)  # 书名
    content = db.Column(db.Text, nullable=False)  #  简介
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  # 通过外键联系到用户的id
    user = db.relationship('User', backref=db.backref('books')) # 调用backref方法查找对应的书
db.create_all()  # 创建数据库

 现在数据库的模型已经建立完成了,下面就是在主方法里面来对这个数据库进行增删改查的操作了

@app.route('/')
def index():
    # 首先添加数据,通过实例化两个表的对象来添加属性
    user1 = User(username='A同学')
    user2 = User(username='B同学')
    user3 = User(username='C同学')
    book1 = Book(title="Java从入门到放弃", content="这是一本Java学习书", user_id=1)
    book2 = Book(title="Python从入门到秃顶", content="这是一本python字典书", user_id=2)
    book3 = Book(title="Flask Web开发",content="从入门到转行",user_id=3)    
    #添加进db数据库对象
    db.session.add(user1)
    db.session.add(book1)
    db.session.add(user2)
    db.session.add(book2)
    db.session.add(user3)
    db.session.add(book3)
    #提交到数据库里面
    #第一次新建完成之后,如果没问题可以注释掉添加对象的代码,因为数据库中已经存在,不然会报错
    db.session.commit()
    #下面是调用query.filter()方法来查找对应的属性的对象
    Book.user_id=User.query.filter(User.id==1).first()  #查找书号为1的书
    book = Book.query.filter(Book.title=='Flask Web开发').first()  #工具书名查找书籍
    #根据书的user_id(借出去的用户的序号)来查找用户的名字
    user_id= book.user_id
    user = User.query.filter(User.id==user_id).first()
    print('用户名:',user.username)    
    # 查找书名来更改书名
    book = Book.query.filter(Book.title == 'Java从入门到放弃').first()
    book.title = 'Java第二行代码'
    print('书名:', book.title)
    print('简介:', book.content)
    print('用户名:', book.user.username)
    # 如果大家有兴趣可以新建多个模型,比如一个用户可以对应多个图书,通过用户名查找借的书的信息
    user = User.query.filter(User.username == 'A同学').first()
    result = user.books
    for book in result:
      print('书名:', book.title)    
    
    # 启动服务器,每次执行刷新以下
    return "数据库更新成功!"
if __name__ == '__main__':
    app.run(debug=True)
发布了58 篇原创文章 · 获赞 31 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/83870039