具有当前数据库版本设置的'oracle'方言不支持空插入



有人知道这个错误意味着什么吗?下面是返回错误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))

按照以下检查表解决相同错误:

  1. 检查column namesdictionary keys(要插入的dict(是否匹配(区分大小写匹配(
  2. 某些database objects类似于触发器,过程试图在不存在的列中插入一个值
  3. 尝试为NUN-NULL列插入none值

最新更新