有人知道这个错误意味着什么吗?下面是返回错误sqlalchemy.exc.CompileError的类方法:具有当前数据库版本设置的"oracle"方言不支持空插入。
我在sqlserver中使用了相同的类方法,它也能工作。如何在oracle中使用sqlalchemy orm绕过这一点?
def insertr(self, tablename, data, schema=None):
def convert_nan(v):
if pd.isnull(v) or pd.isna(v):
v = None
return v
class DbTable(object):
pass
engine = self.engine
metadata = MetaData(bind=engine)
table = Table(tablename, metadata, autoload=True, quote=True, schema=schema)
mapper(DbTable, table)
DbTable.__getattribute__(DbTable, self.primary_key)
insert_rows = [{k: convert_nan(v) for k, v in check_ir.items()} for check_ir in data]
session = sessionmaker(bind=engine)()
session.bulk_insert_mappings(DbTable, insert_rows)
session.commit()
session.flush()
我试图插入的数据看起来像:
[{'coll': 10, 'col2': 'value'}, {'col1': 20, 'col2': 'value'}]
我找到了解决这个问题的方法,所以如果有人遇到同样的问题,这里的代码是:
def insertr(self, tablename, data, schema=None):
def convert_nan(v):
if pd.isnull(v) or pd.isna(v):
v = None
return v
engine = self.engine
metadata = MetaData(bind=engine)
table = Table(tablename, metadata, autoload=True, quote=True, schema=schema)
insert_rows = [{k.lower(): convert_nan(v) for k, v in check_ir.items()} for check_ir in data]
with engine.begin() as connection:
for insert_row in insert_rows:
connection.execute(table.insert().values(**insert_row))
按照以下检查表解决相同错误:
- 检查
column names
和dictionary keys
(要插入的dict(是否匹配(区分大小写匹配( - 某些
database objects
类似于触发器,过程试图在不存在的列中插入一个值 - 尝试为
NUN-NULL
列插入none值