Python 使用Oracle和sqlalchemy插入新数据时出错
我有一个1-1关系的两个表/对象,使用炼金术。我试图为其中一个表插入新行(通过FK引用第一个表中的行),但失败了。与使用sqlite时使用的代码相同,但已停止使用Oracle 12.2.xPython 使用Oracle和sqlalchemy插入新数据时出错,python,oracle,sqlalchemy,flask-sqlalchemy,Python,Oracle,Sqlalchemy,Flask Sqlalchemy,我有一个1-1关系的两个表/对象,使用炼金术。我试图为其中一个表插入新行(通过FK引用第一个表中的行),但失败了。与使用sqlite时使用的代码相同,但已停止使用Oracle 12.2.x class SomeData(db.Model): id = db.Column("id", db.Integer, db.Sequence('id_seq', start=1), primary_key=True) company_
class SomeData(db.Model):
id = db.Column("id", db.Integer, db.Sequence('id_seq', start=1),
primary_key=True)
company_data_label = db.Column(db.String(24),
db.ForeignKey('company.dataLabel'), nullable=False)
...more data
@staticmethod
def new_from_dict(data):
data = SomeData(
company=data["company"],
more fields
)
return data
class Company(db.Model):
id = db.Column("id", db.Integer, db.Sequence('id_seq', start=1),
primary_key=True)
employee_id = db.Column(db.Integer, db.ForeignKey('analyst.id'),
nullable=True)
data = db.relationship('SomeData', backref='company', lazy=True)
dataLabel = db.Column(db.String(24), nullable=False, unique=True)
我在Company表中有一行可以引用,我只是想在SomeData中添加一行:
new_datum = SomeData.new_from_dict(row_dict)
current_app.logger.debug(new_datum)
get_db().session.add(new_datum)
get_db().session.commit()
其中,row_dict是一个字典,其中包含一个“company”=从数据库检索到的company对象
我得到的错误是:
ERROR in models: There were database errors: data not written in DB:
(cx_Oracle.DatabaseError) DPI-1043: invalid number [SQL: 'INSERT INTO
some_data (id, company_data, ....truncated.... , ***'ret_0':
<cx_Oracle.STRING with value [[], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [],
[]]>,*** '"date"': datetime.datetime(2019, 5, 10, 1, 4, 5)}] (Background on
this error at: http://sqlalche.me/e/4xp6).
模型中的错误:存在数据库错误:数据未写入数据库:
(cx_Oracle.DatabaseError)DPI-1043:无效数字[SQL:'插入到
某些数据(id、公司数据等)被截断,***'ret\U 0':
,***“date”:datetime.datetime(2019,5,10,1,4,5)}(背景在
此错误发生在:http://sqlalche.me/e/4xp6).
有什么想法吗?经过一些挖掘后解决了。这是因为尝试插入NaN值。我不是专家,但我可以想象SQL无法解释原始
日期时间
对象。感谢您的响应。嗯,好的,我会检查,但sqlite在使用相同模式时开箱即用。不,我将所有日期都转换为iso字符串,所以这应该是正确的很好。我认为这与空ID有关。出于某种原因,insert没有为新创建的对象提供ID。我仔细检查了日期问题,但事实并非如此。Oracle可以处理datetime对象。似乎是这个错误关闭了:ret_0':