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

时间:2013-12-06 06:36:37

标签: sqlalchemy mapping

我回来了,这次我对SQLAlchemy有疑问。

假设我在某些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,即使我已经将其与其他表一起声明了。我在代码中做错了吗?

感谢您提供任何帮助。

0 个答案:

没有答案