I am seeing an error when trying to insert a row with a date field
into an SQLite database. The error is the same as the problem that has
been seen with Decimals on postgres but presumably it's a different
issue. I have upgraded my pysqlite to 3.3.17 but that didn't help.
Below is the full error and a minimal repro scenario.
The problem goes away if you reorder the columns in the table creation
code to put the date column last (sadly this doesn't fix the problem
in my real code...). I have other tables with date columns that work
without any problem. I noticed in the log for inserting rows into
those other tables that the date value appears in the SQL as something
like '2007-06-01' rather than '(datetime.date(2007, 6, 1),)' as in the
error message below. That may be relevant or it may be an artefact of
the way the log message is created as opposed to the exception string.
I'm running Python 2.5 on Windows with SQLAlchemy 0.3.7.
Any ideas what the problem might be?
Thanks
Ben
---------------------------------
Traceback (most recent call last):
File "C:\cygwin\home\barwork\test.py", line 20, in <module>
session.flush()
File "build\bdist.win32\egg\sqlalchemy\orm\session.py", line 302, in
flush
File "build\bdist.win32\egg\sqlalchemy\orm\unitofwork.py", line 219,
in flush
File "build\bdist.win32\egg\sqlalchemy\orm\unitofwork.py", line 409,
in execute
File "build\bdist.win32\egg\sqlalchemy\orm\unitofwork.py", line
1027, in execute
File "build\bdist.win32\egg\sqlalchemy\orm\unitofwork.py", line
1041, in execute_save_steps
File "build\bdist.win32\egg\sqlalchemy\orm\unitofwork.py", line
1032, in save_objects
File "build\bdist.win32\egg\sqlalchemy\orm\mapper.py", line 1182, in
save_obj
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 509, in
execute
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 549, in
execute_clauseelement
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 560, in
execute_compiled
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 573, in
_execute_raw
File "build\bdist.win32\egg\sqlalchemy\engine\base.py", line 591, in
_execute
sqlalchemy.exceptions.SQLError: (InterfaceError) Error binding
parameter 1 - probably unsupported type. u'INSERT INTO things (date,
value) VALUES (?,?)' ['(datetime.date(2007, 6, 1),)', ('asdf',)]
from sqlalchemy import *
from datetime import date
class Thing(object):
def __init__(self, date, value):
self.date = date,
self.value = value,
thing_table = Table('things',
Column('id', Integer, primary_key=True),
Column('date', Date),
Column('value', String(10)))
mapper(Thing, thing_table)
global_connect('sqlite://')
default_metadata.create_all()
session = create_session()
session.save(Thing(date.today(), 'asdf'))
session.flush()
> sqlalchemy.exceptions.SQLError: (InterfaceError) Error binding
> parameter 1 - probably unsupported type. u'INSERT INTO things (date,
> value) VALUES (?,?)' ['(datetime.date(2007, 6, 1),)', ('asdf',)]
both the date and the 'asdf' values are being sent in the form of one-
element tuples.
this is due to this:
> class Thing(object):
> def __init__(self, date, value):
> self.date = date,
> self.value = value,
which should be:
class Thing(object):
def __init__(self, date, value):
self.date = date
self.value = value
and all is well.