Rick Morrison wrote:
> Is the column you're having issues with really a VARCHAR, or is the
> message misleading? How did you create the table, pre-existing or via
> SQLAlchemy? Can you show the schema and the code you're trying to access
> it with?
It's a preexisting table. The column in the DB is of type BINARY. The
type used in the python code is Binary(). I'm trying to insert a Binary
value from a python program into a MS SQL database BINARY column using
SQLAlchemy.
Below is the schema from the table as dumped via the SQL Enterprise
Manager, the declarative SQLAlchemy class used and the sample code used,
plus the traceback:
------------------ MS SQL TABLE -----------------------------
CREATE TABLE [SY00500] (
[GLPOSTDT] [datetime] NOT NULL ,
[BCHSOURC] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[BACHNUMB] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[SERIES] [smallint] NOT NULL ,
[MKDTOPST] [tinyint] NOT NULL ,
[NUMOFTRX] [int] NOT NULL ,
[RECPSTGS] [smallint] NOT NULL ,
[DELBACH] [tinyint] NOT NULL ,
[MSCBDINC] [smallint] NOT NULL ,
[BACHFREQ] [smallint] NOT NULL ,
[RCLPSTDT] [datetime] NOT NULL ,
[NOFPSTGS] [smallint] NOT NULL ,
[BCHCOMNT] [char] (61) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[BRKDNALL] [tinyint] NOT NULL ,
[CHKSPRTD] [tinyint] NOT NULL ,
[RVRSBACH] [tinyint] NOT NULL ,
[USERID] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[CHEKBKID] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[BCHTOTAL] [numeric](19, 5) NOT NULL ,
[BCHEMSG1] [binary] (4) NOT NULL ,
[BCHEMSG2] [binary] (4) NOT NULL ,
[BACHDATE] [datetime] NOT NULL ,
[BCHSTRG1] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[BCHSTRG2] [char] (21) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[POSTTOGL] [tinyint] NOT NULL ,
[MODIFDT] [datetime] NOT NULL ,
[CREATDDT] [datetime] NOT NULL ,
[NOTEINDX] [numeric](19, 5) NOT NULL ,
[CURNCYID] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[BCHSTTUS] [smallint] NOT NULL ,
[CNTRLTRX] [int] NOT NULL ,
[CNTRLTOT] [numeric](19, 5) NOT NULL ,
[PETRXCNT] [smallint] NOT NULL ,
[APPROVL] [tinyint] NOT NULL ,
[APPRVLDT] [datetime] NOT NULL ,
[APRVLUSERID] [char] (15) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
,
[ORIGIN] [smallint] NOT NULL ,
[ERRSTATE] [int] NOT NULL ,
[GLBCHVAL] [binary] (4) NOT NULL ,
[Computer_Check_Doc_Date] [datetime] NOT NULL ,
[Sort_Checks_By] [smallint] NOT NULL ,
[SEPRMTNC] [tinyint] NOT NULL ,
[REPRNTED] [smallint] NOT NULL ,
[CHKFRMTS] [smallint] NOT NULL ,
[TRXSORCE] [char] (13) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[PmtMethod] [smallint] NOT NULL ,
[EFTFileFormat] [smallint] NOT NULL ,
[Workflow_Approval_Status] [smallint] NOT NULL ,
[Workflow_Priority] [smallint] NOT NULL ,
[TIME1] [datetime] NOT NULL ,
[DEX_ROW_ID] [int] IDENTITY (1, 1) NOT NULL ,
CONSTRAINT [PKSY00500] PRIMARY KEY NONCLUSTERED
(
[BCHSOURC],
[BACHNUMB]
) ON [PRIMARY] ,
CHECK (datepart(hour,[APPRVLDT]) = 0 and datepart(minute,[APPRVLDT]) =
0 and datepart(second,[APPRVLDT]) = 0 and
datepart(millisecond,[APPRVLDT]) = 0),
CHECK (datepart(hour,[BACHDATE]) = 0 and datepart(minute,[BACHDATE]) =
0 and datepart(second,[BACHDATE]) = 0 and
datepart(millisecond,[BACHDATE]) = 0),
CHECK (datepart(hour,[Computer_Check_Doc_Date]) = 0 and
datepart(minute,[Computer_Check_Doc_Date]) = 0 and
datepart(second,[Computer_Check_Doc_Date]) = 0 and
datepart(millisecond,[Computer_Check_Doc_Date]) = 0),
CHECK (datepart(hour,[CREATDDT]) = 0 and datepart(minute,[CREATDDT]) =
0 and datepart(second,[CREATDDT]) = 0 and
datepart(millisecond,[CREATDDT]) = 0),
CHECK (datepart(hour,[GLPOSTDT]) = 0 and datepart(minute,[GLPOSTDT]) =
0 and datepart(second,[GLPOSTDT]) = 0 and
datepart(millisecond,[GLPOSTDT]) = 0),
CHECK (datepart(hour,[MODIFDT]) = 0 and datepart(minute,[MODIFDT]) = 0
and datepart(second,[MODIFDT]) = 0 and datepart(millisecond,[MODIFDT]) = 0),
CHECK (datepart(hour,[RCLPSTDT]) = 0 and datepart(minute,[RCLPSTDT]) =
0 and datepart(second,[RCLPSTDT]) = 0 and
datepart(millisecond,[RCLPSTDT]) = 0),
CHECK (datepart(day,[TIME1]) = 1 and datepart(month,[TIME1]) = 1 and
datepart(year,[TIME1]) = 1900)
) ON [PRIMARY]
-------------------- SQLAlchemy Class -------------------------
class BatchHeader(gp_Base):
__tablename__ = 'sy00500'
GLPOSTDT = Column(DateTime, nullable=False)
BCHSOURC = Column(String(15), nullable=False, primary_key=True)
BACHNUMB = Column(String(15), nullable=False, primary_key=True
SERIES = Column(Integer, nullable=False)
MKDTOPST = Column(Integer, nullable=False)
NUMOFTRX = Column(Integer, nullable=False)
RECPSTGS = Column(Integer, nullable=False)
DELBACH = Column(Integer, nullable=False)
MSCBDINC = Column(Integer, nullable=False)
BACHFREQ = Column(Integer, nullable=False)
RCLPSTDT = Column(DateTime, nullable=False)
NOFPSTGS = Column(Integer, nullable=False)
BCHCOMNT = Column(String(61), nullable=False)
BRKDNALL = Column(Integer, nullable=False)
CHKSPRTD = Column(Integer, nullable=False)
RVRSBACH = Column(Integer, nullable=False)
USERID = Column(String(15), nullable=False)
CHEKBKID = Column(String(15), nullable=False)
BCHTOTAL = Column(Numeric(19, 5), nullable=False)
#Total of all transactions dollars
BCHEMSG1 = Column(Binary(4), nullable=False)
BCHEMSG2 = Column(Binary(4), nullable=False)
BACHDATE = Column(DateTime, nullable=False)
BCHSTRG1 = Column(String(21), nullable=False)
BCHSTRG2 = Column(String(21), nullable=False)
POSTTOGL = Column(Integer, nullable=False)
MODIFDT = Column(DateTime, nullable=False)
CREATDDT = Column(DateTime, nullable=False)
NOTEINDX = Column(Numeric(19, 5), nullable=False)
CURNCYID = Column(String(15), nullable=False)
BCHSTTUS = Column(Integer, nullable=False)
CNTRLTRX = Column(Integer, nullable=False)
CNTRLTOT = Column(Numeric(19, 5), nullable=False)
PETRXCNT = Column(Integer, nullable=False)
APPROVL = Column(Integer, nullable=False)
APPRVLDT = Column(DateTime, nullable=False)
APRVLUSERID = Column(String(15), nullable=False)
ORIGIN = Column(Integer, nullable=False)
ERRSTATE = Column(Integer, nullable=False)
GLBCHVAL = Column(MSBinary(4), nullable=False)
Computer_Check_Doc_Date = Column(DateTime, nullable=False)
Sort_Checks_By = Column(Integer, nullable=False)
SEPRMTNC = Column(Integer, nullable=False)
REPRNTED = Column(Integer, nullable=False)
CHKFRMTS = Column(Integer, nullable=False)
TRXSORCE = Column(String(13), nullable=False)
PmtMethod = Column(Integer, nullable=False)
EFTFileFormat = Column(Integer, nullable=False)
Workflow_Approval_Status = Column(Integer, nullable=False)
Workflow_Priority = Column(Integer, nullable=False)
TIME1 = Column(DateTime, nullable=False)
def __init__(self, bachnum):
currenttime = datetime(*datetime.now().timetuple()[:3])
bchtotal = 0.0
self.GLPOSTDT = currenttime
self.BCHSOURC = "Rcvg Trx Entry"
self.BACHNUMB = bachnum
self.SERIES = 4
self.MKDTOPST = 0
self.NUMOFTRX = 1
self.RECPSTGS = 0
self.DELBACH = 0
self.MSCBDINC = 0
self.BACHFREQ = 1
self.RCLPSTDT = datetime(1900, 1, 1)
self.NOFPSTGS = 0
self.BCHCOMNT = ''
self.BRKDNALL = 0
self.CHKSPRTD = 0
self.RVRSBACH = 0
self.USERID = 'sa'
self.CHEKBKID = 'CB01'
self.BCHTOTAL = bchtotal
self.BCHEMSG1 = '\x00\x00\x00\x00' #bin
self.BCHEMSG2 = '\x00\x00\x00\x00' #bin
self.BACHDATE = datetime(1900, 1, 1)
self.BCHSTRG1 = ''
self.BCHSTRG2 = ''
self.POSTTOGL = 0
self.MODIFDT = currenttime
self.CREATDDT = currenttime
self.NOTEINDX = 0.0
self.CURNCYID = ''
self.BCHSTTUS = 0
self.CNTRLTRX = 0
self.CNTRLTOT = 0
self.PETRXCNT = 0
self.APPROVL = 0
self.APPRVLDT = datetime(1900, 1, 1)
self.APRVLUSERID = ''
self.ORIGIN = 1
self.ERRSTATE = 0
self.GLBCHVAL = '\x00\x00\x00\x00' #bin
self.Computer_Check_Doc_Date = datetime(1900, 1, 1)
self.Sort_Checks_By = 0
self.SEPRMTNC = 0
self.REPRNTED = 0
self.CHKFRMTS = 0
self.TRXSORCE = ''
self.PmtMethod = 0
self.EFTFileFormat = 0
self.Workflow_Approval_Status = 0
self.Workflow_Priority = 0
self.TIME1 = datetime(1900, 1, 1)
------------ Sample Code -------------------------
>>> import sqlalchemy as sa
>>> engine = sa.create_engine('mssql://user:pass@/?dsn=GPTest',
... encoding='latin-1', convert_unicode=True)
>>> from myproj import model
>>> from myproj.model import BatchHeader
>>> model.meta.Session = sa.orm.sessionmaker(bind=engine)
>>> s = model.meta.Session()
>>> s.add(BatchHeader('foo'))
>>> s.commit()
------------------ Traceback ------------------
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/session.py",
line 669, in commit
self.transaction.commit()
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/session.py",
line 375, in commit
self._prepare_impl()
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/session.py",
line 359, in _prepare_impl
self.session.flush()
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/session.py",
line 1367, in flush
self._flush(objects)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/session.py",
line 1437, in _flush
flush_context.execute()
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/unitofwork.py",
line 263, in execute
UOWExecutor().execute(self, tasks)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/unitofwork.py",
line 757, in execute
self.execute_save_steps(trans, task)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/unitofwork.py",
line 772, in execute_save_steps
self.save_objects(trans, task)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/unitofwork.py",
line 763, in save_objects
task.mapper._save_obj(task.polymorphic_tosave_objects, trans)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/orm/mapper.py",
line 1215, in _save_obj
c = connection.execute(statement.values(value_params), params)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 848, in execute
return Connection.executors[c](self, object, multiparams, params)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 899, in execute_clauseelement
return self._execute_compiled(elem.compile(dialect=self.dialect,
column_keys=keys, inline=len(params) > 1), distilled_params=params)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 911, in _execute_compiled
self.__execute_raw(context)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 920, in __execute_raw
self._cursor_execute(context.cursor, context.statement,
context.parameters[0], context=context)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 964, in _cursor_execute
self._handle_dbapi_exception(e, statement, parameters, cursor)
File
"/srv/gartersnake/lib/python2.5/site-packages/SQLAlchemy-0.5.0rc1-py2.5.egg/sqlalchemy/engine/base.py",
line 946, in _handle_dbapi_exception
raise exc.DBAPIError.instance(statement, parameters, e,
connection_invalidated=is_disconnect)
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', "[42000]
[FreeTDS][SQL Server]Disallowed implicit conversion from data type
varchar to data type binary, table 'TWO.dbo.SY00500', column 'BCHEMSG1'.
Use the CONVERT function to run this query. (260) (SQLPrepare)") 'INSERT
INTO sy00500 ([GLPOSTDT], [BCHSOURC], [BACHNUMB], [SERIES], [MKDTOPST],
[NUMOFTRX], [RECPSTGS], [DELBACH], [MSCBDINC], [BACHFREQ], [RCLPSTDT],
[NOFPSTGS], [BCHCOMNT], [BRKDNALL], [CHKSPRTD], [RVRSBACH], [USERID],
[CHEKBKID], [BCHTOTAL], [BCHEMSG1], [BCHEMSG2], [BACHDATE], [BCHSTRG1],
[BCHSTRG2], [POSTTOGL], [MODIFDT], [CREATDDT], [NOTEINDX], [CURNCYID],
[BCHSTTUS], [CNTRLTRX], [CNTRLTOT], [PETRXCNT], [APPROVL], [APPRVLDT],
[APRVLUSERID], [ORIGIN], [ERRSTATE], [GLBCHVAL],
[Computer_Check_Doc_Date], [Sort_Checks_By], [SEPRMTNC], [REPRNTED],
[CHKFRMTS], [TRXSORCE], [PmtMethod], [EFTFileFormat],
[Workflow_Approval_Status], [Workflow_Priority], [TIME1]) VALUES (?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'
[datetime.datetime(2008, 9, 19, 0, 0), 'Rcvg Trx Entry', 'foo', 4, 0, 1,
0, 0, 0, 1, datetime.datetime(1900, 1, 1, 0, 0), 0, '', 0, 0, 0, 'sa',
'CB01', '0.0', <read-only buffer for 0xb74738a0, size -1, offset 0 at
0x8387560>, <read-only buffer for 0xb74738a0, size -1, offset 0 at
0x8387580>, datetime.datetime(1900, 1, 1, 0, 0), '', '', 0,
datetime.datetime(2008, 9, 19, 0, 0), datetime.datetime(2008, 9, 19, 0,
0), '0.0', '', 0, 0, '0', 0, 0, datetime.datetime(1900, 1, 1, 0, 0), '',
1, 0, <read-only buffer for 0xb74738a0, size -1, offset 0 at 0x83875c0>,
datetime.datetime(1900, 1, 1, 0, 0), 0, 0, 0, 0, '', 0, 0, 0, 0,
datetime.datetime(1900, 1, 1, 0, 0)]
-John
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---