On Jun 5, 2014, at 11:25 PM, Wenlong LU <[email protected]> wrote: > hi, > > I have the following model: > > class Product(Base): > skus = Column(ARRAY(JSON)) > > > p = Product(skus=[{"skuPrice": "44.88", "skuStock": true, "aeopSKUProperty": > [], "skuCode": "060314"}]) > > session.add(p) > t.commit() > > Error comes out: > sqlalchemy.exc.InvalidRequestError: This Session's transaction has been > rolled back due to a previous exception during flush. To begin a new > transaction with this Session, first issue Session.rollback(). Original > exception was: (raised as a result of Query-invoked autoflush; consider using > a session.no_autoflush block if this flush is occuring prematurely) > (ProgrammingError) column "skus" is of type json[] but expression is of type > text[] .. > > 'INSERT INTO product (created_at, updated, skus) VALUES (%(created_at)s, > %(updated_at)s, %(skus)s) RETURNING product.id' {'skus': ['{"skuPrice": > "44.88", "skuStock": true, "aeopSKUProperty": [], "skuCode": "060314"}'], > 'created_at': .... } > > > it seems sqlalchemy only support array(Unicode), it convert Json into str...
typically the handling of ARRAY and JSON falls to psycopg2 so it may not be supported on that side. It's a pretty odd case to have JSON inside of ARRAY. to try fixing this as is would involve experimenting with psycopg2's array/json extensions to see if psycopg2 supports it directly (that is, get a script to do this INSERT using only psycopg2, but make sure you're using bound parameters), then to make sure SQLAlchemy's PG dialect isn't doing anything to get in the way of that. unfortunately I don't have a simple fix here. this is a bug in either SQLAlchemy, psycopg2 or both. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.
