df.to_sql
中的pandas
方法再次上传了数据。
注意::我正在使用df.to_sql将以前保存的CSV加载回数据库。这个想法是要恢复我存储的数据。
现在,当一切恢复正常(或我认为)时,当我尝试使用通常的方法(填写表格)上载数据并提交数据库中的更改时,出现以下错误:
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError) duplicate key violates \
uniqueness restriction
Detail: The key already exists (id) = (#).
每次我重复该过程时,错误都保持不变,只有#
更改为#+1
(例如:从2变为3,依此类推)。
对不起,我的英语,如果您需要任何澄清,请询问,我将尽我所能编辑这篇文章。
感谢您的时间!
编辑1: 该过程正在向数据库添加新行并提交:
new_observation = Observations(var1 = new_var1, var2 = new_var2)
db.session.add(new_observation)
db.session.commit()
编辑2: 数据库的模型是:
class Observations(db.Model):
__tablename__ = 'observations'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
timestamp = db.Column(db.DateTime, index=True, default=datetime.today())
var1= db.Column(db.Numeric)
var2= db.Column(db.Numeric)
编辑3:
正如mad_建议的那样,我尝试直接填充primary key
:
new_observation = Observations(primary_key = some_number, var1 = new_var1, var2 = new_var2)
db.session.add(new_observation)
db.session.commit()
现在的问题是我收到了这个新错误:
sqlalchemy.orm.exc.FlushError: New instance <observations at 0x47deb50> \
with identity key (<class 'app.models.observations '>, (368,), None) \
conflicts with persistent instance <observations at 0x4ab8a90>
答案 0 :(得分:0)
由于@mad_的评论,我得以解决我的问题。当我将表上传回数据库时出现的问题。当我尝试向数据库提交新的观察值时,出现错误。
一种解决方法是显式声明primary key
。这样,我得到了一个新的错误,该错误通过禁用primary key
(autoincrement = False
)的autoincrement属性来解决。