官方文档解释如下:http://www.pythondoc.com/flask-sqlalchemy/config.html#id2
数据库连接:SQLALCHEMY_DATABASE_URI
用于配置连接数据库的配置项,针对不同的数据库,其相对的配置方式如下:
-
MySQL
mysql直接连接以及使用python连接mysql的第三方库
#default 'mysql://username:password@server/db' #mysqlclient (MySQL-Python的维护分支) 'mysql+mysqldb://username:password@server/db' #PyMySQL 'mysql+pymysql://username:password@server/db'
-
SQLite
默认情况下,SQLite使用Python内置模块sqlite3连接到基于文件的数据库。1. 当SQLite连接到本地文件时,URL格式略有不同。 URL的“文件”部分是数据库的文件名。 对于相对文件路径,这需要三个斜杠: #sqlite://<nohostname>/<path> #where <path> is relative: 'sqlite:///foo.db' # 数据库文件是相对路径下的 2. 对于绝对文件路径,三个斜杠后跟绝对路径: #Unix/Mac - 4 initial slashes in total 'sqlite:absolute/path/to/foo.db' #Windows 'sqlite:///C:\\path\\to\\foo.db' #Windows 直接使用原始字符串 r'sqlite:///C:\path\to\foo.db' 3. 要使用SQLite :memory:数据库,请指定一个空URL: 'sqlite://'
关于PostgreSQ,Oracle,Microsoft SQL Server 等数据库,等后期用到再做补充,具体可参考官方文档:https://docs.sqlalchemy.org/en/13/core/engines.html#supported-databases
绑定多个数据库:SQLALCHEMY_BINDS
对于同一个项目,当需要使用多个库或者不同的数据库时,需要SQLALCHEMY_BINDS配置进行设置
下面的配置声明了三个数据库连接。特殊的默认值和另外两个分别名为 users(用于用户)和
appmeta 连接到一个提供只读访问应用内部数据的 sqlite 数据库):
SQLALCHEMY_DATABASE_URI = 'postgres://localhost/main'
SQLALCHEMY_BINDS = {
'users': 'mysqldb://localhost/users',
'appmeta': 'sqlite:path/to/appmeta.db'
}
在使用时,需要将模型类指定使用哪个数据库,使用属性__bind_key__进行操作
class User(db.Model):
__bind_key__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
开启慢查询:SQLALCHEMY_RECORD_QUERIES
在调试模式下,Flask-SQLAlchemy将记录发送到数据库的所有SQL查询。该信息在请求结束之前一直可用,从而可以轻松地确保生成的SQL是在错误或单元测试中期望的SQL。
flask 在 debug 模式下运行时,flask-sqlalchemy 会自动记录所有的 queries,在请求结束前,可以通过 flask_sqlalchemy.get_debug_queries() 获取到所有查询。
在非 debug 模式下,也可以在配置中手动指定 SQLALCHEMY_RECORD_QUERIES=True,使 get_debug_queries 可用。
get_debug_queries()
用法参考如下:
# 设置配置变量
app.config['DATABASE_QUERY_TIMEOUT'] = 0.001
app.config['SQLALCHEMY_RECORD_QUERIES'] = True
# 在请求结束时,记录慢查询
@app.after_request
def after_request(response):
for query in get_debug_queries():
if query.duration >= app.config['DATABASE_QUERY_TIMEOUT']: # 用时判断
app.logger.warning(
('\nContext:{}\nSLOW QUERY: {}\nParameters: {}\n'
'Duration: {}\n').format(query.context, query.statement,
query.parameters, query.duration))
return response
其他类似代码可参考: http://codingdict.com/sources/py/flask_sqlalchemy/7983.html