[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