关于 flask-sqlalchemy 的跨 db 查询

2020-01-16 21:28:32 +08:00
 mashpolo

今天碰到一个棘手的问题,一个接口需要同时查询两个 db 的两个表,但其中一个表,sqlalchemy 查找的 db 是另外一个,导致查询找不到该表

model 代码如下

class BusinessGroup(db.Model):
    __bind_key__ = 'amp'
    __tablename__ = 'business_group'

    business_group_id = Column(db.BigInteger, primary_key=True)
    
class DeployJob(Base):
    __tablename__ = 'deploy_job'

    id = Column(BIGINT(20), primary_key=True)

数据库连接:


SQLALCHEMY_BINDS = {'amp': 'mysql+pymysql://{user}:{passwd}@{host}:{port}/{db}'.format(**AMP_MYSQL_CFG)}

查询的接口代码

def getDpJobList():
    try:
        deploy_jobs_basic = db.session.query(DeployJob.id,
                                             BusinessGroup.dept_id)

得到的错误:

(pymysql.err.ProgrammingError) (1146, "Table 'monitor.deploy_job' doesn't exist")

不知道有知道该问题所在的小伙伴没?求指导。 多谢

3221 次点击
所在节点    Python
9 条回复
yzongyue
2020-01-16 21:57:33 +08:00
两个 db (schema) 不在一个 db 上?那没办法了,分别查出来 python 处理下吧
mashpolo
2020-01-16 22:29:08 +08:00
@yzongyue #1 看文档应该是可以的,使用`__bind_key__`可以定义另外的 model,但我这个,不知道是哪出问题了。查询非 bind 的 table 的时候,结果找到 bind 的 db 中去了
outoftimeerror
2020-01-16 23:17:08 +08:00
直接 presto 吧
yzongyue
2020-01-16 23:39:11 +08:00
@mashpolo bind key 可以绑定不同的 db,但 python 代码最终还是要转换成 sql,不在一个 db 当然不能一个 sql 查出来
tairan2006
2020-01-17 08:45:19 +08:00
直接裸用 sqlalchemy,新建一个 engine…
whoosy
2020-01-17 09:13:12 +08:00
两个 db 不能用同一个 session,也就是不能用一个 db.session, 但是可以再开一个 db.session 去查
mashpolo
2020-01-17 11:20:41 +08:00
@yzongyue #4
@tairan2006 #5
@whoosy #6 了解了,看来确实不行,我修改下设计的思路
houzhiqiang
2021-07-19 15:49:38 +08:00
可以看看官方文档
http://www.pythondoc.com/flask-sqlalchemy/config.html
有这样一个配置项
SQLALCHEMY_BINDS
houzhiqiang
2021-07-19 15:51:27 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638558

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX