Abhinav
Abhinav

Reputation: 1042

SQLAlchemy returns an integer

I am accessing a database using SQLAlchemy. When I try to filter the table using a bunch of public and private keys I get an Attribute error saying 'int' object has no attribute 'date'.

Sometimes, I am able to filter the results once and when the filter is called again, it crashes giving me the same error. Is this the problem of SQLAlchemy or PyDev?

Below is the snippet of my filter.

randomize_query(session('test').query(tableName).filter(tableName.field1 == criteria, tableName.field2 == 2).order_by(desc(tableName.field3))).first()

The full traceback is as below

  File "C:\Python27\lib\site-packages\sqlalchemy\orm\query.py", line 2145, in first
    ret = list(self[0:1])
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\query.py", line 2012, in __getitem__
    return list(res)
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\loading.py", line 72, in instances
    rows = [process[0](row, None) for row in fetch]
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\loading.py", line 447, in _instance
    populate_state(state, dict_, row, isnew, only_load_props)
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\loading.py", line 301, in    populate_state
    populator(state, dict_, row)
  File "C:\Python27\lib\site-packages\sqlalchemy\orm\strategies.py", line 150, in fetch_col
    dict_[key] = row[col]
  File "C:\Python27\lib\site-packages\sqlalchemy\engine\result.py", line 89, in __getitem__
    return processor(self._row[index])
  File "C:\Python27\lib\site-packages\sqlalchemy\dialects\oracle\cx_oracle.py", line 250, in process
    return value.date()
AttributeError: 'int' object has no attribute 'date'

Upvotes: 0

Views: 1866

Answers (1)

Martijn Pieters
Martijn Pieters

Reputation: 1121654

The exception is thrown when the result set is loaded and SQLAlchemy wants to populate the result objects. One column is qualified as a Date type, but the Oracle result set is giving you an integer instead.

The cx_Oracle library will normally convert Oracle-supplied native DATE column value into Python datetime.datetime object. However, this is not happening for all your rows here.

You'll need to narrow down what row or rows have a column that is not being translated to a datetime object. Find a pattern in the filters that include or exclude these rows and narrow it down so you can inspect the database rows by hand in a different client.

Upvotes: 1

Related Questions