我回来了,这次我对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,即使我已经将其与其他表一起声明了。我在代码中做错了吗?
感谢您提供任何帮助。