create_engine,用这个函数来创建引擎,然后用engine.connect()来连接数据库。
engine = create_engine(DB_URI)
DB_URI 是以下格式的字符串
dialect+driver://username:password@host:port/database
- dialect 是数据库的实现,比如MySQ、PostgreSQL、SQLite
- driver是Python对应的驱动,如果不指定,会选择默认的驱动,比如MySQL的默认驱动是MySQLdb。(MySQLdb不可用,需用pysql)
- usename 是连接数据库的用户名
- password 是连接数据库的密码
- host 是连接数据库的域名
- port 是数据库监听的端口号
- database 是连接那个数据库的名字
与flask使用时需要将上面的那个字符串添加到config.py中,以SQLALCHEMY_DATABASE_URI
为名,再添加一个配置SQLALCHEMY_TRACK_MODIFICATIONS = False
。
from flask_sqlalchemy import SQLAlchemy
import config
app = Flask(__name__)
app.config.from_object(config)#为app添加配置
db = SQLAlchemy(app)#用SQLAlchemy初始化
db.create_all()#用于测试配置
分开models和解决循环引用
把db
放在一个单独的文件中,切断引用线条就可以了。
关键在于使用db.init_app(app)
初始化db
#models_sep.py
from flask import Flask
from exts import db
import config
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
@app.route('/')
def hello_world():
return "hello world"
if __name__ == '__main__':
app.run()
# models.py
from exts import db
class Article(db.Model):
__tablenaem = 'article
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100),nullable=False)
# exts.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# config.py
SQLALCHEMY_DATABASE_URI = 'mysql+mysqldb://root:password@127.0.0.1:3306/a_database'
SQLALCHEMY_TRACK_MODIFICATIONS = False
使用Flask-SQLAlchemy创建模型与表的映射:
- 模型需要继承
db.Model
,然后映射到表的属性必须写成db.Column
的数据类型。 - 数据类型
- db.Integer 代表的是整型
- db.String 代表的是 varchar, 需要指定最长的长度
- db.Text 代表的是 text
- 其他参数:
- primary_key
- autoincrement
- nullable
- 最后需要调用
db.create_all
将模型创建到数据库中。
增查改删
article1 = Article(title='aaa', content='bbb')
db.session.add(article1)
db.session.commit()
result = Article.query.filter(Article.title == 'aaa').first()
print(result.title)
article1 = Article.query.filter(Article.title == 'aaa').first()
article1.title = 'new title'
db.session.commit()
article1 = Article.query.filter(Article.content == 'bbb').first
db.session.delete(article1)
db.session.commit()