简介
Flask-SQLAlchemy 是一个flask 扩展,简化了在Flask 程序中使用 SQLAlchemy 的操作,SQLAlchemy 是一个很强大的关系型数据库框架,支持多种数据库后台。
安装
pip install flask-sqlalchemy
连接
SQLAlchemy 把一个引擎的源表示为一个连同设定引擎选项的可选字符串参数的 URI。URI 的形式是:
dialect+driver://username:password@host:port/database
该字符串中的许多部分是可选的。如果没有指定驱动器,会选择默认的(确保在这种情况下 不 包含 + )。
数据库引擎 | URL |
---|---|
MySQL | mysql://scott:tiger@localhost/mydatabase |
Postgres | postgresql://scott:tiger@localhost/mydatabase |
Oracle | oracle://scott:tiger@127.0.0.1:1521/sidname |
SQLite(Unix) | sqlite:absolute/path/to/foo.db |
SQLite(Windows) | sqlite:///c:/absolute/path/to/foo.db |
这里多一句嘴,一般像用户名,密码什么的这类信息最好不要直接写在代码中,特别是当你有意愿将你的代码开源的话,会暴露自己的个人信息,而且不方便管理,最好是统一写在一个 config 文件中
建表
from flask_sqlalchemy import SQLAlchemy
from flask import Flask
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://%s:%s@localhost:8889/movie" % (MysqlConfig.user,MysqlConfig.pwd)
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = "True"
db = SQLAlchemy(app)
class Tag(db.Model):
__tablename__ = "tag" # 表名
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
addtime = db.Column(db.DateTime, index=True, default=datetime.utcnow)
movies = db.relationship("Movie", backref='tag')
if __name__ == '__main__':
db.create_all()
从上面的例子很容易看出,SQLAlchemy 采用了面向对象的思想管理数据库,建表很简单,首先连接好你的数据库,并实例化一个对象;然后你需要建多少张 table 就定义多少个 class ,并在类中将 table 的名称和字段定义好;最后再执行一条,db.create_all(),就可以将你之前定义好的所有 table 创建好了
插入数据
tag = Tag(
name = 'root'
)
db.session.add(tag)
db.session.commit()
Tag 是前面定义好的类,只需要对其相应字段进行赋值;然后调用一个session.add() 函数,最后再将修改提交即可,十分便捷,效果如图。