gpt4 book ai didi

python - flask-sqlalchemy:无法连接来自两个数据库的表(不同的绑定(bind)键)。收到错误 1146(见下文)

转载 作者:行者123 更新时间:2023-11-29 02:13:04 30 4
gpt4 key购买 nike

我正在使用 python 和 sqlalchemy 构建一个 Flask-Restful API,我正在尝试连接来自不同数据库的两个表。看来我一次只能在一个数据库中搜索表。我错过了什么吗?

from flask_sqlalchemy import SQLAlchemy
from flask import Flask, jsonify, request

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@host:8000/database1'
app.config['SQLALCHEMY_BINDS'] = {
'database2': 'mysql://username:password@host:8000/database2'
}


db = SQLAlchemy(app)
db.create_all(bind='database2')

class Table1(db.Model):
__tablename__ = "table1"
__table_args__ = {'schema':'database1'}
location_id = db.Column(db.Integer, primary_key=True)

def __init__(self, location_id):
self.location_id = location_id
def __repr__(self):
return '{}'.format(self.location_id)

class Table2(db.Model):
__bind_key__ = "database2"
__tablename__ = "table2"
__table_args__ = {'schema':'database2'}
other_id = db.Column(db.Integer, primary_key=True)
location_id = db.Column(db.Integer, db.ForeignKey('database1.table1.location_id'))

def __init__(self, other_id, location_id):
self.other_id = other_id
self.location_id = location_id

def __repr__(self):
return '{}'.format(self.other_id)


@app.route('/', methods=['GET'])
def returnRes():
session = db.session
q = session.query(table1).join(table2, table1.location_id==table2.location_id).all()
return str(q)

在我的浏览器中,我收到错误: 'sqlalchemy.exc.ProgrammingError: (_mysql_exceptions.ProgrammingError)(1146,“表 'database1.table2' 不存在”)。

两个表确实存在,当我将查询更改为
q = session.query(table2).join(table1, table2.location_id==table1.location_id).all()
我收到一条错误消息,指出 database2.table1 不存在。

我正在使用 python==3.6.1,Flask==0.11.1 和 Flask-SQLAlchemy==2.1

最佳答案

向我的表类添加一个数据库模式参数并添加一个外键解决了这个问题。我在这个链接找到了答案:https://github.com/mitsuhiko/flask-sqlalchemy/issues/172

我已经更新了问题以反射(reflect)答案,以防它对其他人有帮助。

我不确定这些绑定(bind)是否多余,但我将它们保留了下来,因为它们似乎不会干扰任何东西。

关于python - flask-sqlalchemy:无法连接来自两个数据库的表(不同的绑定(bind)键)。收到错误 1146(见下文),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46612971/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com