Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python sqlalchemy经典映射关系问题_Python_Sqlalchemy - Fatal编程技术网

Python sqlalchemy经典映射关系问题

Python sqlalchemy经典映射关系问题,python,sqlalchemy,Python,Sqlalchemy,我的使命是最终学习炼金术,这样我才能在未来的岁月里收获收益 我对sqlalchemy文档非常感兴趣,在过去的两天里一直都是这样。我下定决心学习经典的映射方式,而不是声明式的,我想要连接的db存在,并且在它的所有表中没有唯一的id列 我一直在遵循sqlalchemy站点的经典示例,但我似乎找不到正确的关系配置来实现这一点 以下是我的全部代码: engine = create_engine( "mssql+pyodbc://someaddress/test?driver=FreeTDS?TD

我的使命是最终学习炼金术,这样我才能在未来的岁月里收获收益

我对sqlalchemy文档非常感兴趣,在过去的两天里一直都是这样。我下定决心学习经典的映射方式,而不是声明式的,我想要连接的db存在,并且在它的所有表中没有唯一的id列

我一直在遵循sqlalchemy站点的经典示例,但我似乎找不到正确的关系配置来实现这一点

以下是我的全部代码:

engine = create_engine(
    "mssql+pyodbc://someaddress/test?driver=FreeTDS?TDS_version=8.0", echo=True)

metadata = MetaData(engine)

class User(object):

    def __repr__(self):
        return "<User(User_id='%s', name='%s', age='%s')>" % (
                            self.user_id, self.name, self.age)
class Email(object):

    def __repr__(self):
        return "<User(email_id='%s', address='%s', user_id='%s')>" % (
                            self.email_id, self.address, self.user_id)

users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('name', String(40)),
    Column('age', Integer),
    schema='test.dbo.users')

mapper(User, users, properties={'Email': relationship(Email, primaryjoin=users.c.user_id==emails.c.user_id)})

emails = Table('emails', metadata,
    Column('email_id', Integer, primary_key=True),
    Column('address', String),
    Column('user_id', Integer, ForeignKey('test.dbo.users.user_id')),
    schema='test.dbo.emails')

mapper(Email, emails)

Session = sessionmaker(bind=engine)
session = Session()

mary = session.query(User, Email).filter(User.user_id == Email.user_id)
我尝试了一长串不同的事情来补救,但我就是无法找到它的底部

任何指向正确方向的指针都将不胜感激

我使用的sqlalchemy版本是

'1.0.12'

我的运气更好:

Column('user_id', Integer, ForeignKey('users.user_id')),
我还稍微对表和映射代码进行了重新排序:

users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('name', String(40)),
    Column('age', Integer))

emails = Table('emails', metadata,
    Column('email_id', Integer, primary_key=True),
    Column('address', String),
    # foreign key to table users
    Column('user_id', Integer, ForeignKey('users.user_id')))

mapper(Email, emails)

mapper(User, users, properties={
    'Email': relationship(
        Email, primaryjoin=users.c.user_id==emails.c.user_id)})

在未设置
User
mapper属性中的
primaryjoin
值的情况下,您是如何尝试的?我认为你不需要它,而且在它存在之前,你正在参考
电子邮件。谢谢你的关注。我有。然后,我得到以下错误:
NoForeignKeysError:无法确定relationship User.Email上的父/子表之间的联接条件-没有链接这些表的外键。确保引用列与ForeignKey或ForeignKeyConstraint关联,或指定“primaryjoin”表达式。
users = Table('users', metadata,
    Column('user_id', Integer, primary_key=True),
    Column('name', String(40)),
    Column('age', Integer))

emails = Table('emails', metadata,
    Column('email_id', Integer, primary_key=True),
    Column('address', String),
    # foreign key to table users
    Column('user_id', Integer, ForeignKey('users.user_id')))

mapper(Email, emails)

mapper(User, users, properties={
    'Email': relationship(
        Email, primaryjoin=users.c.user_id==emails.c.user_id)})