使用用户输入动态创建烧瓶SQLALCHEMY数据库连接 [英] Dynamically create flask sqlalchemy database connection using user inputs

查看:5
本文介绍了使用用户输入动态创建烧瓶SQLALCHEMY数据库连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否可以使用用户传入的输入创建SqlAlChemy数据库URI。例如,具有用户将必须在其中输入创建数据库URI所需的参数的输入文本字段。只有这样才能建立连接,然后用户才能访问数据库中的数据。

推荐答案

我刚刚遇到了相同的问题,我是这样修复的。

配置部分:

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
from contextlib import contextmanager

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

from greenwater_app import app


app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db/database1.db'
app.config['SQLALCHEMY_BINDS'] = {
    'database2': 'sqlite:///db/database2.db'
}
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
app.config['SQLALCHEMY_ECHO'] = True

db = SQLAlchemy(app)

migrate = Migrate(app, db, compare_type=True)


@contextmanager
def session_scope(bind='default'):
    """Provide a transactional scope around a series of operations."""

    if bind != 'default':
        s = db.create_scoped_session(options={'bind': db.get_engine(db.get_app(), bind)})
    else:
        s = db.session

    s.expire_on_commit = False
    try:
        yield s
        s.commit()
    except:
        s.rollback()
        raise
    finally:
        s.close()

然后,我们可以将";BIND_KEY";作为";数据库2";添加到类定义中,以使用";数据库2";。就像这样。 https://flask-sqlalchemy.palletsprojects.com/en/2.x/binds/

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
class User(db.Model, BaseModelMixin):
    __bind_key__ = "database2"
    __tablename__ = "user"

如果我们想召开一次特别会议,我们可以这样做。

数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
sql = 'select * from user'
with session_scope(bind='database2') as s:
    res = s.execute(sql).fetchall()
    print([dict(r) for r in res])

with session_scope() as s:
    res = s.execute(sql).fetchall()
    print([dict(r) for r in res])

SESSION_SCOPE(绑定=‘数据库2’)将获取数据库2的会话。

这篇关于使用用户输入动态创建烧瓶SQLALCHEMY数据库连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆