【发布时间】:2018-09-06 10:26:11
【问题描述】:
很少,我遇到的问题是我插入到表 Tbl_CUSTOMER 的记录是双重的,来自 Postgres 的自动 ID。
我不知道,但我怀疑这可能是由于 postgres 真空运行时间引起的。为了确认这一点,我尝试在插入记录的同时运行 postgres Vacuum,但没有发现这个问题发生,因此,我无法复制问题以找出根本原因并解决问题。
models.py
class Tbl_CUSTOMER():
ID = db.Column(db.Numeric(25, 9), primary_key=True, autoincrement=True)
PotentialCustomer = db.Column(db.String(12))
FirstNameEn = db.Column(db.String(35))
LastNameEn = db.Column(db.String(35))
FirstNameKh = db.Column(db.String(35))
LastNameKh = db.Column(db.String(35))
Salutation = db.Column(db.String(4))
Gender = db.Column(db.String(6))
DateOfBirth = db.Column(db.String(10))
CountryOfBirth = db.Column(db.String(2))
Nationality = db.Column(db.String(2))
ProvinceOfBirth = db.Column(db.String(3))
views.py
dataInsert =Tbl_CUSTOMER(
PotentialCustomer = request.form['PotentialCustomer'],
FirstNameEn = request.form['FirstNameEn'],
LastNameEn = request.form['LastNameEn'],
FirstNameKh = request.form['FirstNameKh'],
LastNameKh = request.form['LastNameKh'],
Salutation = request.form['Salutation'],
Gender = request.form['Gender'],
DateOfBirth = request.form['DateOfBirth'],
CountryOfBirth = request.form['CountryOfBirth'],
Nationality = request.form['Nationality'],
ProvinceOfBirth = request.form['ProvinceOfBirth']
)
db.session.add(dataInsert)
db.session.commit()
这个问题不会经常发生。那么,问题是什么,我该如何解决这个问题以防止它在将来发生?谢谢。
【问题讨论】:
-
我也不确定您为什么会遇到这个问题。在旁注中,如果表中只有一个 primary_key,您可以删除
autoincrement=True它与 primary_key 一起提供。另外,我很好奇 ID 的类型应该是字符串还是整数,如果它是字符串,它应该增加什么。 -
@mad_ 感谢您的贡献,这对我和我的客户来说都很奇怪。另一方面,我无法删除自动 id,因为我们的应用程序单独实现了 id 模式。无法手动输入 ID。
-
我无法理解如果您有自己的 ID,那么您希望 db 应该如何处理此列上的自动增量行为?
-
@mad_,我的应用程序依赖 postgres 来管理要保存的记录的自动 ID。我所说的 ID 模式是配置为带有两个特定前缀字母的日期/时间序列,例如。 'CUyymmdd`。每天可能有很多记录要保存。手动操作是不可能的。谢谢
-
您对自动增量和从您的应用程序生成的 uuid 生成感到困惑。自动增量是 db 处理的东西,而不是你的应用程序。不建议创建手动 ID,它仍然会从您的应用功能生成。希望一切都有意义
标签: postgresql python-2.7 flask-sqlalchemy