在与PostgreSql连接的烧瓶SqlAlchemy中双重插入记录?

问题描述 投票:3回答:1

很少,我遇到一个问题,我插入表Tbl_CUSTOMER的记录是Postgres的自动ID的两倍。

我不知道,但我怀疑它可能是由postgres真空运行时间造成的。为了确认这一点,我试图在插入记录的同时运行postgres vacuum,但是没有发现这个问题发生,因此,我无法复制问题以找出根本原因并解决问题。

models.朋友

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.朋友

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()

这个问题不经常发生。那么,问题是什么,如何解决这个问题以防止将来发生?谢谢。

postgresql python-2.7 flask-sqlalchemy
1个回答
0
投票

如果使用基于行的所有值的某个散列函数值创建唯一键(或替换主键),则可以帮助您查看何时发生此问题。使用此散列列,您将能够决定在系统获得相同值(相同散列值)时应该发生什么。例如,一个选项只是忽略新行,保留旧行。其他,是重写等

从不同行获取相同哈希值的可能性非常小,我甚至不会考虑这一点。看看这个帖子https://crypto.stackexchange.com/questions/1170/best-way-to-reduce-chance-of-hash-collisions-multiple-hashes-or-larger-hash,如果你想看到更多细节。

© www.soinside.com 2019 - 2024. All rights reserved.