在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模型对象为appclass 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)