我正在使用Session.bulk_insert_mappings()插入一些實體,但當實體具有None
值時,我遇到問題。SQLAlchemy批量插入空柱子
以下批量插入正常工作,單個插入語句來插入所有實體:
session.bulk_insert_mappings(Document, [
dict(document_id=1, version=1, colA=True, colB='a'),
dict(document_id=2, version=1, colA=True, colB='b'),
dict(document_id=3, version=1, colA=True, colB='c')
])
但是當字段爲None
,SQLAlchemy的將分裂插入多個語句:
session.bulk_insert_mappings(Document, [
dict(document_id=1, version=1, colA=True, colB='a'),
dict(document_id=2, version=1, colA=True, colB=None),
dict(document_id=3, version=1, colA=True, colB='c')
])
登錄:
INFO [...] INSERT INTO api.documents (...) VALUES (...)
INFO [...] {'colA': True, 'colB': 'a', 'version': 1, 'document_id': 1}
INFO [...] INSERT INTO api.documents (...) VALUES (...)
INFO [...] {'colA': True, 'version': 1, 'document_id': 2}
INFO [...] INSERT INTO api.documents (...) VALUES (...)
INFO [...] {'colA': True, 'colB': 'c', 'version': 1, 'document_id': 3}
我試着與null()取代None
,但後來我收到以下錯誤「無法適應型‘空’」:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'Null' [SQL: 'INSERT INTO api.documents (...) VALUES (...)'] [parameters: ({'colB': 'a', 'colA': True, 'version': 1, 'document_id': 1}, {'colB': <sqlalchemy.sql.elements.Null object at 0x7f74679c0190>, 'colA': True, 'version': 1, 'document_id': 2}, {'colB': 'c', 'colA': True, 'version': 1, 'document_id': 3})]
我怎樣才能確保單個插入語句甚至被用來當一些實體None
值?
編輯:映射是這樣的:
class Document(Base):
__tablename__ = 'documents'
document_id = Column(Integer, primary_key=True)
version = Column(Integer, nullable=False, server_default='1')
colA = Column(Boolean)
colB = Column(Integer)
你有沒有試圖省略'colB'? –
@TomaszJakubRup我剛剛嘗試過,但結果相同(3個插入語句被創建)。 – tsauerwein
請顯示一個'mapper'類('Document') –