J'utilise une classe mappée sqlalchemy reflétée dans une table SQL Server. J'ai DBSession.add() instances de la classe Activities (la classe mappée) avec des données que j'obtiens d'une source différente. et ensuite j'ai appelé transaction.commit() (puisque j'appelle depuis tg2 je ne peux pas utiliser session.commit())
la trace de l'erreur :
DataError: (DataError) ('22001', '[22001] [Microsoft][ODBC SQL Server Driver][SQ
L Server]String or binary data would be truncated. (8152) (SQLExecDirectW); [010
00] [Microsoft][ODBC SQL Server Driver][SQL Server]The statement has been termin
ated. (3621)') u'INSERT INTO [NOAR_LOADEVENTS] ([EVENTCODE]) VALUES (?)' ((u'210
401',), (u'210402',), (u'210602',), (u'210603',), (u'000010',), (u'000102',), (u
'000206',), (u'000107',) ... displaying 10 of 49 total bound parameter sets ...
(u'211302',), (u'210403',))
Je serais heureux d'avoir de l'aide à ce sujet car je ne sais pas comment continuer/déboguer à partir d'ici.
edit : Je soupçonne que cela a quelque chose à voir avec l'unicode, j'ai donc changé la colonne sqlalchemy en unicode.
peut-être que le DataError est bloqué d'une manière ou d'une autre et que je dois appeler un retour en arrière, mais je ne sais pas comment appeler un retour en arrière dans une transaction dans tg2.
modifier :la colonne EVENTCODE dans le mssql est:datatype:PK,nvarchar(6), not null J'espère que cela vous aidera
autre montage : le code d'insertion (la partie concernée)
event = #json with data
ac['EVENTCODE']=event.get('code')#for example u'210602' - from the failing data
...
...
e = Activities(**ac) # this is the class mapped with sqlalchemy to the NOAR_LOADEVENTS in sqlalchemy.
DBSession2.add(e)
transaction.commit()