在SQLAlchemy中声明(现有表的)外键

在SQLAlchemy中声明(现有表的)外键,sqlalchemy,mapping,Sqlalchemy,Mapping,我回来了,这次我有一个关于炼金术的问题 假设我在一些MySQL数据库中有下表: table Table1 ( id1 id2 primary key(id1, id2) id1 references Table2.id id2 references Table3.id ) 我想使用SQLAlchemy对其进行映射,因此我尝试以下操作: table_1 = Table('Table1', metadata, Column('id1', INTEGER, ForeignKey('Table2.i

我回来了,这次我有一个关于炼金术的问题

假设我在一些MySQL数据库中有下表:

table Table1 (
id1 
id2
primary key(id1, id2)
id1 references Table2.id
id2 references Table3.id
)
我想使用SQLAlchemy对其进行映射,因此我尝试以下操作:

table_1 = Table('Table1', metadata, Column('id1', INTEGER, ForeignKey('Table2.id'),primary_key=True), Column('id2', INTEGER, ForeignKey('Table3.id'),primary_key=True),autoload=True)

class Table_1(object):
pass

mapper(Table_1, table_1)
我试过了,但是SQLAlchemy说它找不到建立关系的表。我曾尝试使用一个现有的数据库,并将其映射到SQLAlchemy,结果成功了,但它是一个简单的测试数据库。里面没有外键。我认为我缺少一些其他的行来建立父表和子表之间的关系,但是查看我所看到的教程并没有帮到我那么多

任何帮助都将不胜感激

谢谢

更新:

这是我为“连接并映射”到MySQL数据库而编写的代码片段:

from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import mapper, sessionmaker

from portal.model import DeclarativeBase, metadata, DBSession

bioentry_ec = Table('BioEntry_EC', metadata, Column("bioentry_id", INTEGER, ForeignKey("bioentry.bioentry_id", ondelete='CASCADE')), Column("ec_id", INTEGER, ForeignKey("EC.id", ondelete='CASCADE')), autoload=True)

ec = Table('EC', metadata, Column("id", INTEGER, primary_key=True), autoload=True)

bioentry = Table('bioentry', metadata, Column("bioentry_id", INTEGER, primary_key=True), Column("biodatabase_id", INTEGER, ForeignKey("biodatabase.biodatabase.id", ondelete='CASCADE')), autoload=True)

biodatabase = Table('biodatabase', metadata, Column("biodatabase_id", INTEGER, primary_key=True), autoload=True)


class BioEntryEC(object):
        pass

class EC(object):
    pass

class Biodatabase(object):
    pass

class Bioentry(object):
    pass

mapper(BioEntryEC, bioentry_ec)
mapper(Biodatabase, biodatabase)
mapper(Bioentry, bioentry)
mapper(EC, ec)
这些是一些映射。我不确定我是否错误地声明了外键,或者我的代码中是否缺少某些内容。请注意,bioentry_ec表中的键构成一个复合键

当我运行turbogears时,它告诉我它找不到biodatabase,尽管我已经将它和其他表一起声明了。我的代码是否有问题


谢谢您在这方面的帮助。

您是否也为
表2
表3
创建了映射?是的,我为其他两个表创建了映射。我认为SQLAlchemy能够“找到”这些表,因为我也声明了它们。我想我需要添加一两行来显示表之间的关系,但我不确定要添加什么。我搜索了这方面的其他信息,偶然发现在SQLAlchemy中使用了relationship()。但是我不知道如何实现它。你是对的,SA应该找到所有的表。在没有更多信息的情况下,我不知道如何进一步指导您。您能显示更完整的代码吗?或者,您确定连接到了正确的数据库/模式吗?我想我可以给您一段代码。我将编辑我的原始问题以显示它。