Flask-SQLAlchemy配置键

官方文档解释如下: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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值