Sqlalchemy 使用SQLAchemy在两个不同数据库上连接表以进行查询?

Sqlalchemy 使用SQLAchemy在两个不同数据库上连接表以进行查询?,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我使用Flask、SQLALchemy、Flask SQLALchemy、棉花糖和datatables为管理员创建游戏服务器的用户列表,它通过唯一标识符(steam id)对条目进行分组,然后使用datatables将steam id的每个字符列成一行,所有这些信息都直接从游戏运行的mariadb数据库中提取,除此之外,我有一个单独的数据库,我使用绑定为网站使用,它都很好地工作。现在,对于这个用户列表,我正在使用marshmallow序列化数据,并从web数据库中添加配置文件信息。但是,我希望能

我使用Flask、SQLALchemy、Flask SQLALchemy、棉花糖和datatables为管理员创建游戏服务器的用户列表,它通过唯一标识符(steam id)对条目进行分组,然后使用datatables将steam id的每个字符列成一行,所有这些信息都直接从游戏运行的mariadb数据库中提取,除此之外,我有一个单独的数据库,我使用绑定为网站使用,它都很好地工作。现在,对于这个用户列表,我正在使用marshmallow序列化数据,并从web数据库中添加配置文件信息。但是,我希望能够在服务器端搜索其中一个概要文件字段(名称),因此我需要加入Users表和Accounts表,除非它们位于单独的数据库中,如上所述

现在查询是字符表和帐户表,它们都在同一个数据库中
characters=Character.query.join(Account.order\u by(Account.ID.desc())

如果我尝试加入web数据库中与游戏数据库分离的用户表,它将尝试查找游戏服务器数据库中不存在的用户表。
characters=Character.query.join(Account).join(User,User.steam\u id==Account.SteamID).order\u by(Account.id.desc())

我在一年前的搜索中看到过对话,后来我放弃了这个,只是用棉花糖来包含信息(但它不可搜索),有人说要在表中添加schema,我尝试过,但一直没有成功

我正在使用flask sqlalchemy,它负责为sqlalchemy创建引擎和会话对象

所以我回去,找到了关于我的问题和他们如何克服它的老帖子,并尝试了他们所做的一切,但它仍然在同一台服务器上寻找它们,而不是通过不同的连接绑定。从这个错误中可以看出:
sqlalchemy.exc.OperationalError:(MySQLdb._exceptions.OperationalError)(1142,“SELECT命令拒绝给用户'lif_1'@'localhost'用于表'user')

因此,select语句可以工作,但它仍然只查看一个数据库并忽略绑定

class User(SurrogatePK, Model, UserMixin):
    """A user of the app."""

    __tablename__ = 'user'
    __table_args__ = {'schema': 'fightclub'}
    __bind__ = 'fightclub'

    steam_id = Column(db.String(40))
    ...

数据库在不同的服务器上吗?如果是这样,你就不能加入他们。“将数据库视为模式”技巧只有在它们位于同一台服务器上时才有效。它们位于不同的服务器上。遗憾的是,我希望可以实现一些元数据魔术。是否可以执行两个单独的查询,然后将数据连接在一起?如果您的DBMS支持外部表,您可以将另一台服务器上的表介绍给另一台服务器,但我认为MySQL风格不支持这些。您只需在Python中组合数据。如果您很了解数据,您可以相应地进行规划,例如执行“哈希连接”。
class User(SurrogatePK, Model, UserMixin):
    """A user of the app."""

    __tablename__ = 'user'
    __table_args__ = {'schema': 'fightclub'}
    __bind__ = 'fightclub'

    steam_id = Column(db.String(40))
    ...
class Account(db.Model):
    __tablename__ = 'account'
    __bind_key__ = 'feudal'
    __table_args__ = {'schema': 'lif_1'}

    ID = db.Column(db.Integer, primary_key=True)
    IsActive = db.Column(db.Integer, nullable=False)
    IsGM = db.Column(db.Integer, nullable=False)
    SteamID = db.Column(db.BigInteger, nullable=False, unique=True)