有人知道这个错误是什么意思吗?下面是返回错误sqlalchemy.exc.CompileError的类方法:具有当前数据库版本设置的'oracle'方言不支持空插入。
我在sqlserver中使用相同的类方法,并且可以工作。如何使用sqlalchemy orm在oracle中绕过它?
PasteSpecial
和我尝试插入的数据如下:
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()
答案 0 :(得分:1)
我找到了解决此问题的方法,因此,如果有人在这里遇到同样的问题,则代码如下:
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 :(得分:0)
下面的清单解决了同样的错误:
column names
和dictionary keys
(要插入的字典)是否匹配(区分大小写)database objects
像触发器一样,过程正在尝试在不存在的列中插入值。NUN-NULL
列插入无值