python - Flask_SQLAlchemy 读取新数据库
问题描述
我正在尝试使用 Flask_SQLAlchemy在我的数据库旁边映射一个外部数据库app.config['SQLALCHEMY_DATABASE_URI']
其中外部数据库是用户输入,所以我无法猜测每个用户的数据库结构
我已经允许用户的数据库和我的系统之间的连接
@app.route('/test')
def test():
engine = db.create_engine(USER_DB)
Session = db.sessionmaker(bind=engine)
session = db.scoped_session(engine)
#after that i was able to get the table name's and structure using
x = {table:db.Table(table,db.metadata,autoload=True,autoload_with=engine)
for table in engine.table_names()}
print(f'\n\n x = {x} \n\n')
findme = session.query(test1.filter_by(id=1).first())
安慰 :
x = {'test1': Table('test1', MetaData(bind=None), Column('id', INTEGER(), table=<test1>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.elements.TextClause object at 0x000001F83BCAEC50>, for_update=False)), Column('name', VARCHAR(), table=<test1>, nullable=False), schema=None), 'test2': Table('test2', MetaData(bind=None), Column('id2', INTEGER(), table=<test2>, nullable=False, server_default=DefaultClause(<sqlalchemy.sql.elements.TextClause object at 0x000001F83BCCEA58>, for_update=False)), Column('name2', VARCHAR(length=200), table=<test2>, nullable=False), schema=None)}
你可以看到它可以读取那里的列结构
然后是其余的输出:
( 追溯 )
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1997, in __call__
return self.wsgi_app(environ, start_response)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1985, in wsgi_app
response = self.handle_exception(e)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1540, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise
raise value
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request
rv = self.dispatch_request()
File "C:\ProgramData\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:\app1\app.py", line 181, in test
cc = session.query(test1.filter_by(id=1).first())
NameError: name 'test1' is not defined
如何让SQLALCHEMY 自动定义结构?是任何一个
*Automap / reflect / python package "sqlacodegen" *在这种情况下很有用,如果是的话,我怎么能从中受益?
解决方案
推荐阅读
- reactjs - 从 React 中的功能组件传递值
- javascript - “禁止(CSRF 令牌丢失或不正确。):”使用 Django 和 JS
- kubernetes - 当 cronjobs 设置为 replace 时,Kubernetes 是否会等待前一个作业完成关闭后再启动新作业?
- javascript - 使用Javascript递归检查对象中的任何空/未定义键/值
- python - 为什么在 RTX 3070/cudnn8/CUDA11.1 上运行时添加卷积/池层会使 Keras/Tensorflow 模型崩溃?
- javascript - 为什么/在哪里多次调用这个 componentDidMount()?
- function - 什么是镜像位的数学(用函数描述)等价物?
- python - docker hub 你是否为每个图像创建一个存储库
- javascript - 如何使用 Pi Vision Web Api 获取过滤后的数据
- excel - 如果包含部分文本/字符,则 Excel 条件格式