[Tutor] sqlobject behavior
Tiago Saboga
tiagosaboga at terra.com.br
Fri Apr 14 02:40:00 CEST 2006
Hi!
I don't understand why sqlobject's ForeignKey attribute has to have the same
name of the linked class. The following example doesn't work (the traceback
is just after) unless I rename the 'p' attribute of 'Address' class as
'person'.
Thanks,
Tiago.
class Person(SQLObject):
name = StringCol()
add = MultipleJoin('Address')
class Address(SQLObject):
street = StringCol()
p = ForeignKey('Person')
def initdb():
connection_string = 'mysql://tiago@localhost/test'
connection = connectionForURI(connection_string)
sqlhub.processConnection = connection
def main():
initdb()
createandfeedTables()
search(raw_input('Search? '))
def createandfeedTables():
try:
Person.createTable()
Address.createTable()
for i, j in (('tiago', 'rua ceara'), ('lucas', 'rua sergipe')):
nam = Person(name=i)
Address(street=j, p=nam)
except:
print 'Assuming tables are created and fed.'
def search(searchexp):
gr = Person.select(CONTAINSSTRING(Person.q.name, searchexp))
for l in gr:
print l.add
if __name__=='__main__':
main()
------------------------------------
$ ./searchjoin2.py
Search? uc
Traceback (most recent call last):
File "./searchjoin2.py", line 47, in ?
main()
File "./searchjoin2.py", line 29, in main
search(raw_input('Search? '))
File "./searchjoin2.py", line 44, in search
print l.add
File "<string>", line 1, in <lambda>
File "/usr/lib/python2.3/site-packages/sqlobject/joins.py", line 131, in
performJoin
inst.id)
File "/usr/lib/python2.3/site-packages/sqlobject/dbconnection.py", line 592,
in _SO_selectJoin
return self.queryAll("SELECT %s FROM %s WHERE %s = %s" %
File "/usr/lib/python2.3/site-packages/sqlobject/dbconnection.py", line 316,
in queryAll
return self._runWithConnection(self._queryAll, s)
File "/usr/lib/python2.3/site-packages/sqlobject/dbconnection.py", line 217,
in _runWithConnection
val = meth(conn, *args)
File "/usr/lib/python2.3/site-packages/sqlobject/dbconnection.py", line 309,
in _queryAll
self._executeRetry(conn, c, s)
File "/usr/lib/python2.3/site-packages/sqlobject/mysql/mysqlconnection.py",
line 60, in _executeRetry
return cursor.execute(query)
File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 137, in
execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line 33, in
defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.OperationalError: (1054, "Unknown column 'person_id' in
'where clause'")
More information about the Tutor
mailing list