Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy示例“;“处理多个连接路径”;抛出异常

Python SQLAlchemy示例“;“处理多个连接路径”;抛出异常,python,database,sqlalchemy,Python,Database,Sqlalchemy,我试图做一些类似于以下示例的事情: 当我执行以下脚本时: #!/usr/bin/python from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String from sqlalchemy.orm import sessionmaker from sqlalchemy import

我试图做一些类似于以下示例的事情:

当我执行以下脚本时:

#!/usr/bin/python
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, backref
from sqlalchemy.orm import aliased

engine = create_engine('sqlite:///demo.db', echo=True)
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

    def __repr__(self):
        return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    email_address = Column(String, nullable=False)
    user_id = Column(Integer, ForeignKey('users.id'))

    user = relationship("User", backref=backref('addresses', order_by=id),     passive_deletes=True)
    user2 = relationship("User", backref=backref('addresses2', order_by=id), passive_deletes=True)

    def __init__(self, email_address):
        self.email_address = email_address

    def __repr__(self):
        return "<Address('%s')>" % self.email_address

class Customer(Base):
    __tablename__ = 'customer'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    billing_address_id = Column(Integer, ForeignKey("addresses.id"))
    shipping_address_id = Column(Integer, ForeignKey("addresses.id"))

    billing_address = relationship("Address", foreign_keys=[billing_address_id])
    shipping_address = relationship("Address", foreign_keys=[shipping_address_id])

    def test():
        print "Testing .."
        # Test code.

    if __name__ == '__main__':
        test()
#/usr/bin/python
从sqlalchemy导入创建引擎
从sqlalchemy.ext.declarative导入声明性基础
从sqlalchemy导入列,整数,字符串
从sqlalchemy.orm导入sessionmaker
从sqlalchemy导入外键
从sqlalchemy.orm导入关系,backref
从sqlalchemy.orm导入别名
引擎=创建引擎('sqlite:///demo.db,echo=True)
Base=声明性_Base()
类用户(基本):
__tablename_uu='users'
id=列(整数,主键=True)
名称=列(字符串)
fullname=列(字符串)
密码=列(字符串)
定义初始化(self、name、fullname、password):
self.name=名称
self.fullname=fullname
self.password=密码
定义报告(自我):
返回“”%(self.name、self.fullname、self.password)
班级地址(基本地址):
__tablename_uu='地址'
id=列(整数,主键=True)
电子邮件地址=列(字符串,可空=假)
user\u id=列(整数,ForeignKey('users.id'))
用户=关系(“用户”,backref=backref('addresses',order\u by=id),被动\u deletes=True)
user2=关系(“User”,backref=backref('addresses2',order\u by=id),被动\u deletes=True)
定义初始化(自我,电子邮件地址):
self.email\u address=电子邮件地址
定义报告(自我):
返回“%self.email\u地址”
类别客户(基本):
__tablename_uuu=‘客户’
id=列(整数,主键=True)
名称=列(字符串)
账单地址id=列(整数,外键(“addresses.id”))
shipping\u address\u id=列(整数,ForeignKey(“addresses.id”))
账单地址=关系(“地址”,外键=[账单地址\u id])
配送地址=关系(“地址”,外键=[配送地址\u id])
def test():
打印“测试…”
#测试代码。
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
测试()
我明白了

2013-06-30 12:56:53938信息sqlalchemy.engine.base.engine PRAGMA表\u信息(“用户”)
2013-06-30 12:56:53938信息sqlalchemy.engine.base.engine()
2013-06-30 12:56:53939信息sqlalchemy.engine.base.engine PRAGMA表信息(“地址”)
2013-06-30 12:56:53940信息sqlalchemy.engine.base.engine()
2013-06-30 12:56:53940信息sqlalchemy.engine.base.engine PRAGMA表信息(“客户”)
2013-06-30 12:56:53940信息sqlalchemy.engine.base.engine()
回溯(最近一次呼叫最后一次):
文件“/test.py”,第131行,在
测试()
文件“/test.py”,第70行,在测试中
ed_user=用户('ed','ed Jones','edspassword'))
文件“”,第2行,在_init中__
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/instrumentation.py”,第309行,处于“新”状态,如果没有
state=self.\u state\u构造函数(实例,self)
文件“/usr/lib/python2.7/dist packages/sqlalchemy/util/langhelpers.py”,第494行,在__
obj.\uuuuu dict\uuuuu[self.\uuuuuuuuuuu name\uuuuuuuuu]=结果=self.fget(obj)
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/instrumentation.py”,第157行,处于“状态”
self.dispatch.first_init(self,self.class_)
文件“/usr/lib/python2.7/dist packages/sqlalchemy/event.py”,第377行,在调用中__
fn(*参数,**千瓦)
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/mapper.py”,第2347行,在第一次初始化的事件中
配置映射器()
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/mapper.py”,第2263行,在configure_mappers中
映射程序。_post_configure_properties()
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/mapper.py”,第1172行,在“post\u configure\u properties”中
prop.init()
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/interfaces.py”,第128行,在init中
self.do_init()
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/properties.py”,第911行,在do_init中
self.\u determine\u joins()
文件“/usr/lib/python2.7/dist packages/sqlalchemy/orm/properties.py”,第1048行,在
%(自我)
sqlalchemy.exc.ArgumentError:无法确定关系Customer.u地址上的父/子表之间的联接条件。指定“primaryjoin”表达式。如果存在“secondary”,则还需要“secondaryjoin”。

我希望这个示例能够开箱即用,而不必将primaryjoin作为参数添加到relationship()。

我要说的是,这不是SQLAlchemy 0.8,很可能是0.7版本。确保您使用的是0.8,在以前的版本中,在更多情况下需要primaryjoin(请参阅)

2013-06-30 12:56:53,938 INFO sqlalchemy.engine.base.Engine PRAGMA     table_info("users")
2013-06-30 12:56:53,938 INFO sqlalchemy.engine.base.Engine ()
2013-06-30 12:56:53,939 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("addresses")
2013-06-30 12:56:53,940 INFO sqlalchemy.engine.base.Engine ()
2013-06-30 12:56:53,940 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("customer")
2013-06-30 12:56:53,940 INFO sqlalchemy.engine.base.Engine ()
Traceback (most recent call last):
  File "./test.py", line 131, in <module>
test()
  File "./test.py", line 70, in test
ed_user = User('ed', 'Ed Jones', 'edspassword')
  File "<string>", line 2, in __init__
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/instrumentation.py", line 309, in _new_state_if_none
state = self._state_constructor(instance, self)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/util/langhelpers.py", line 494, in __get__
obj.__dict__[self.__name__] = result = self.fget(obj)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/instrumentation.py", line 157, in _state_constructor
self.dispatch.first_init(self, self.class_)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/event.py", line 377, in __call__
fn(*args, **kw)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 2347, in _event_on_first_init
configure_mappers()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 2263, in configure_mappers
mapper._post_configure_properties()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 1172, in _post_configure_properties
prop.init()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/interfaces.py", line 128, in init
self.do_init()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/properties.py", line 911, in do_init
self._determine_joins()
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/orm/properties.py", line 1048, in _determine_joins
% self)
sqlalchemy.exc.ArgumentError: Could not determine join condition between parent/child tables on relationship Customer.billing_address.  Specify a 'primaryjoin' expression.     If 'secondary' is present, 'secondaryjoin' is needed as well.