[Biopython-dev] BioSQL test code on Postgres

Cymon Cox cy at cymon.org
Mon Aug 30 13:36:22 EDT 2010


Hi Folks,

The current test code in test_BioSQL.py fails on PostgreSQL;

ERROR: Check list, keys, length etc
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/cymon/git/biopython-github-master/Tests/test_BioSQL.py", line
187, in test_get_db_items
    del db["non-existant-name"]
  File "/home/cymon/git/biopython-github-master/BioSQL/BioSeqDatabase.py",
line 519, in __delitem__
    if key not in self:
  File "/home/cymon/git/biopython-github-master/BioSQL/BioSeqDatabase.py",
line 539, in __contains__
    (self.dbid, value))[0])
  File "/home/cymon/git/biopython-github-master/BioSQL/BioSeqDatabase.py",
line 423, in execute_and_fetch_col0
    self.execute(sql, args or ())
  File "/home/cymon/git/biopython-github-master/BioSQL/BioSeqDatabase.py",
line 404, in execute
    self.dbutils.execute(self.cursor, sql, args)
  File "/home/cymon/git/biopython-github-master/BioSQL/DBUtils.py", line 33,
in execute
    cursor.execute(sql, args or ())
DataError: invalid input syntax for integer: "non-existant-name"
LINE 1: ...M bioentry WHERE biodatabase_id=1 AND bioentry_id=E'non-exis...

Because when trying to delete a bioentry_id that is a string type, ie.
"non-existant-name" (line 188 on test_BioSQL.py),  postgres throws an error
rather than returning a long (0,1) as in sqlite (and presumably MySQL (I
havent tried it)).

Should we be type checking in __delitem__ (line 517) in BioSeqDatabase.py so
that trying to delete a bioentry_id that is a string throws an appropriate
error?

Otherwise the BioSQL tests pass on PostGreSQL.

The default DBDRIVER PostgreSQL driver in setup.py should be changed to
"pyscopg2"

Cheers, Cymon


More information about the Biopython-dev mailing list