SQLAlchemy изменяет значение после фиксации

Казалось бы, из ниоткуда мое приложение Flask теперь вставляет одно и то же значение для одного столбца в таблице в моей базе данных, независимо от того, когда оно работало ранее.

У меня есть модель здесь:

class rma_test_record(db.Model):
    primary_key = db.Column(db.Integer, primary_key=True)
    test_key = db.Column(db.Integer)
    test_result = db.Column(db.Boolean, default=False)
    rma_number = db.Column(db.Integer)
    test_date = db.Column(db.DateTime, default=dt.utcnow)

    def __init__(self, rma_number, test_key, test_result):
        self.test_key = test_key
        self.test_result = test_result
        self.rma_number = rma_number

    def __repr__(self):
        return str(self.rma_number) + ' - ' + str(self.primary_key) + ' - ' + str(self.test_key) + ' - ' + str(self.test_result)

    def save(self):
        db.session.add( self )
        db.session.commit()

и код в моем приложении:

new_test = rma_test_record(rma_number=rma_number, test_key=test_key, test_result=test_result)
print(new_test)
new_test.save()
print(new_test)

Результат отпечатков

2203193857 - None - 41 - True
2147483647 - 7484 - 41 - True

Таким образом, похоже, что после фиксации записи число меняется, и оно всегда остается одним и тем же. Я никогда не видел такой проблемы и не могу понять, что происходит.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема заключается в диапазоне вашего значения и типе столбца, в котором значение сохраняется.

Столбец rma_number имеет тип столбца SQLAlchemy Integer, но значение, которое вы передаете (в данном примере это 2203193857), больше, чем максимальное значение Integer. В результате по умолчанию используется максимальное значение, которое он может хранить 2147483647 (т.е.: 2^31 - 1)

Вместо этого рассмотрите возможность использования типа столбца BigInteger, который позволяет использовать большие числа. Дополнительные типы столбцов SQLAlchemy см. в статье https://docs.sqlalchemy.org/en/14/core/type_basics.html.

Другие вопросы по теме