上传数据后提交错误

时间:2018-08-13 17:06:13

标签: python-3.x pandas flask flask-sqlalchemy

我有一个简单的程序,将一些输入存储在数据库中。我将flask-sqlalchemy用作ORM,到目前为止没有任何问题。由于某些问题,我不得不将数据保存到CSV文件中并清除所有内容。之后,我使用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>

1 个答案:

答案 0 :(得分:0)

由于@mad_的评论,我得以解决我的问题。当我将表上传回数据库时出现的问题。当我尝试向数据库提交新的观察值时,出现错误。

一种解决方法是显式声明primary key。这样,我得到了一个新的错误,该错误通过禁用primary keyautoincrement = False)的autoincrement属性来解决。