Hi anusha,

The error is unrelated to your Login query because sqlalchemy compiles
the mappers as late as possible.  It might help if you put somewhere
in your application code, after you have imported all your entities,
the lines:

  from sqlalchemy import orm
  orm.compile_mappers()

to catch these sorts of errors early.

Now the specific problem you see is that the ORM uses the declared
ForeignKeys to determine how to join tables for a relation, but on
your Detail table you have two foreign keys back to account and the
ORM doesn't know which one to use.

On Feb 16, 9:49 pm, anusha kadambala <anusha.kadamb...@gmail.com>
wrote:
> hello all,
>
> My tables are giving following error at the time of querying. The tables got
> created properly but when i query on some table it is showing error on other
> tables.I didnt understand whats the issue here. I am querying on login table
> it is giving error on debitnote details tables.
>
> Tables:
> **************************
> class Login(Base):
>     __tablename__ = 'login'
>     usercode = Column(Integer,primary_key=True)
>     username = Column(Text)
>     userpassword = Column(Text)
>     userrole = Column(Text)
>
>     def __init__(self,username,userpassword,userrole):
>         self.username = username
>         self.userpassword = userpassword
>         self.userrole = userrole
>
> login_table = Login.__table__
>
> class Account(Base):
>     __tablename__ = "account"
>     accountcode =  Column(Integer, primary_key = True)
>     groupcode = Column(Integer, ForeignKey("groups.groupcode"), nullable =
> False)
>     groups = relation(Groups, backref = backref("Account", order_by =
> accountcode))
>     accountname = Column(Text, nullable = False)
>     basedon = Column(Text)
>     accountdesc  = Column(Text)
>     openingbalance = Column(Numeric(13,2))
>     openingdate = Column(TIMESTAMP)
>     initialbalance = Column(Numeric(13,2))
>
>     def
> __init__(self,groupcode,groups,accountname,basedon,accountdesc,openingbalance,openingdate,initialbalance):
>         self.groupcode = groupcode
>         self.groups = groups
>         self.accountname = accountname
>         self.basedon = basedon
>         self.accountdesc = accountdesc
>         self.openingbalance = openingbalance
>         self.openingdate = openingdate
>         self.initialbalance = initialbalance
>
> account_table = Account.__table__
>
> class DebitnoteMaster(Base):
>     __tablename__ = "debitnotemaster"
>     vouchercode = Column(String(40), primary_key = True)
>     sbillno = Column(String(40))
>     voucherdate = Column(TIMESTAMP, nullable = False)
>     reffdate = Column(TIMESTAMP)
>     booktype = Column(Text)
>     chequeno = Column(Text)
>     bankname = Column(Text)
>     debitnarration = Column(Text, nullable = False)
>
>     def
> __init__(self,vouchercode,sbillno,voucherdate,reffdate,booktype,chequeno,bankname,debitnarration):
>         self.vouchercode = vouchercode
>         self.sbillno = sbillno
>         self.voucherdate = voucherdate
>         self.reffdate = reffdate
>         self.booktype = booktype
>         self.chequeno = chequeno
>         self.bankname = bankname
>         self.debitnarration = debitnarration
>
> debitnotemaster_table = DebitnoteMaster.__table__
>
> class DebitnoteDetails(Base):
>     __tablename__ = "debitnotedetails"
>     dndtcode = Column(Integer, primary_key = True)
>     vouchercode = Column(String(40),
> ForeignKey("debitnotemaster.vouchercode"))
>     debitnotemaster = relation(DebitnoteMaster, backref =
> backref("DebitnoteDetails", order_by = dndtcode))
>     craccountcode = Column(Integer, ForeignKey("account.accountcode"),
> nullable = False)
>     account = relation(Account, backref = backref("DebitnoteDetails",
> order_by = dndtcode))
>     draccountcode = Column(Integer, ForeignKey("account.accountcode"),
> nullable = False)
>     account = relation(Account, backref = backref("DebitnoteDetails",
> order_by = dndtcode))
>     amount = Column(Numeric(13,2), nullable = False)
>
>     def __init__(self,vouchercode,craccountcode,draccountcode,amount):
>         self.vouchercode = vouchercode
>         self.craccountcode = craccountcode
>         self.draccountcode = draccountcode
>         self.amount = amount
>
> debitnotedetails_table = DebitnoteDetails.__table__
>
> ****************************
>
> Error:
> *****************************
>
> Traceback (most recent call last):
>   File "/usr/lib/python2.6/dist-packages/twisted/web/server.py", line 150,
> in process
>     self.render(resrc)
>   File "/usr/lib/python2.6/dist-packages/twisted/web/server.py", line 157,
> in render
>     body = resrc.render(self)
>   File "/usr/lib/python2.6/dist-packages/twisted/web/resource.py", line 190,
> in render
>     return m(request)
>   File "/usr/lib/python2.6/dist-packages/twisted/web/xmlrpc.py", line 118,
> in render_POST
>     defer.maybeDeferred(function, *args).addErrback(
> --- <exception caught here> ---
>   File "/usr/lib/python2.6/dist-packages/twisted/internet/defer.py", line
> 106, in maybeDeferred
>     result = f(*args, **kw)
>   File
> "/home/sonal/Desktop/gnukhata_alpha/gnukhata-server/GNUKhata-ApplicationServer/rpc_user.py",
> line 53, in xmlrpc_getUser
>     res = Session.query(dbconnect.Login).filter(dbconnect.Login.username ==
> queryParams[0]).filter(dbconnect.Login.userpassword ==
> queryParams[1]).first()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/scoping.py",
> line 127, in do
>     return getattr(self.registry(), name)(*args, **kwargs)
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/session.py",
> line 875, in query
>     return self._query_cls(entities, self, **kwargs)
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/query.py",
> line 91, in __init__
>     self._set_entities(entities)
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/query.py",
> line 100, in _set_entities
>     self._setup_aliasizers(self._entities)
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/query.py",
> line 114, in _setup_aliasizers
>     mapper, selectable, is_aliased_class = _entity_info(entity)
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/util.py",
> line 512, in _entity_info
>     mapper = mapper.compile()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/mapper.py",
> line 696, in compile
>     mapper._post_configure_properties()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/mapper.py",
> line 725, in _post_configure_properties
>     prop.init()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/interfaces.py",
> line 484, in init
>     self.do_init()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/properties.py",
> line 735, in do_init
>     self._determine_joins()
>   File
> "/usr/local/lib/python2.6/dist-packages/SQLAlchemy-0.6beta1-py2.6.egg/sqlalchemy/orm/properties.py",
> line 826, in _determine_joins
>     "many-to-many relation, 'secondaryjoin' is needed as well." % (self))
> sqlalchemy.exc.ArgumentError: Could not determine join condition between
> parent/child tables on relation DebitnoteDetails.account.  Specify a
> 'primaryjoin' expression.  If this is a many-to-many relation,
> 'secondaryjoin' is needed as well.
>
> --
>
> Thanks in advance
>
> Njoy the share of Freedom :)
> Anusha Kadambala

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to