Двойная вставка записей в колбу SqlAlchemy связана с PostgreSql? - PullRequest
0 голосов
/ 06 сентября 2018

Очень редко я сталкиваюсь с проблемой, что запись, которую я вставил в таблицу Tbl_CUSTOMER, была двойной с автоматическим идентификатором из Postgres.

Понятия не имею, но я подозревал, что это может быть вызвано вакуумным прогревом. Чтобы подтвердить это, я попытался запустить postgresuum в тот же момент со вставкой записи, но не смог найти, что эта проблема произошла, поэтому я не смог продублировать проблему, чтобы найти причину и устранить проблему.

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

Эта проблема возникает не часто. Итак, в чем проблема, и как я могу это исправить, чтобы предотвратить это в будущем? Спасибо.

1 Ответ

0 голосов
/ 13 сентября 2018

Если вы создаете уникальный ключ (или заменяете свой первичный ключ) некоторым значением хэш-функции, основанным на всех значениях вашей строки, это может помочь вам увидеть, когда возникает эта проблема. Используя этот столбец хеширования, вы сможете решить, что должно произойти, когда ваша система получит такое же значение (тот же хеш). Например, одна опция просто игнорирует новую строку, сохраняя старую. Другое, это переписать и т. Д.

Вероятность получить одно и то же значение хеш-функции из разных строк настолько мала, что я бы даже не подумал об этом. Посмотрите эту тему https://crypto.stackexchange.com/questions/1170/best-way-to-reduce-chance-of-hash-collisions-multiple-hashes-or-larger-hash, если вы хотите увидеть более подробную информацию об этом.

...