SQLAlchemy的重要功能之一,就是允许我们根据数据库的表结构来创建数据模型,这样做就不需要手动登录到数据库中使用SQL语句来创建表了。
那怎么创建呢?
数据模型!只要把数据模型定义好,表结构自然生成。
一、创建数据库表
表需要放在数据库中,这里我们沿用之前的“wuhao”数据库,没有的话使用create database wuhao;命令创建。然后新建文件app.py,代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
from datetime import datetime
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50), nullable=False)
publishing_office = db.Column(db.String(100), nullable=False)
storage_time = db.Column(db.DateTime, default=datetime.now)
db.create_all()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True)
导入的config.py文件与之前的文件相同,是登录数据库代码。
运行后查看是否报错:
如果没报错,用MySQL命令行可以看到成功添加了“book”表:
Flask-SQLAlchemy中字段的声明可选择参数描述,例如用来指定是否是表的主键、表的一列中是否允许有相同只、是否允许某列的值为空等,具体如下:
l primary_key:如果设置为True,该列为表的主键;
l unique:如果设置为True,该列不允许有相同值;
l index:如果设置为True,为提高查询效率,为该列创建索引;
l nullable:如果设置为True,该列允许为空;
l default:定义该列的默认值。
二、添加数据
如果需要添加数据,只用通过类实例化添加。首先用命令drop table book;删除之前创建的“book”表,然后运行下面的代码,内容如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import config
from datetime import datetime
import pymysql
pymysql.install_as_MySQLdb()
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
db.init_app(app)
class Book(db.Model):
__tablename__ = 'book'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(50), nullable=False)
publishing_office = db.Column(db.String(100), nullable=False)
isbn = db.Column(db.String(100), nullable=False)
storage_time = db.Column(db.DateTime, default=datetime.now)
db.create_all()
book1 = Book(id='005', title='人工智能导论', publishing_office='高等教育出版社', isbn='9787040479843')
db.session.add(book1)
db.session.commit()
@app.route('/')
def index():
return "Hello World!"
if __name__ == '__main__':
app.run(debug=True)
上面的代码产生了一个book1对象,它的属性包括id=’005’,title=’人工智能导论’,publishing_ofiice=’高等教育出版社’, isbn='9787040479843',之所以要删除表是因为这次加入了isbn属性,需要重新创建。
创建好的类对象需要通过db.session.add(book1)把对象添加到会话中,再通过db.session.commit()完成事务提交。
由于是中文,会有乱码问题。
三
从上面的内容也能看出,表实际上是一种映射关系,只要确定好数据模型,表结构会自然生成。
今天的内容就这么多,下一次将说说如何用SQLAlchemy进行增、删、改、查。
你确定不关注我一波?