SQLAlchemy 在提交后更改值
SQLAlchemy changes value after commit
我的 Flask 应用程序现在似乎无处不在,为我数据库中的 table 中的一列插入相同的值,而不管它以前在什么时候工作。
我这里有模特:
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
所以看起来在提交记录后,数字发生了变化,并且始终是同一个数字。我从未见过这样的问题,无法弄清楚发生了什么。
问题在于您的值的范围和值保存到的列的类型。
rma_number
列的 SQLAlchemy 列类型为 Integer
,但您传入的值(在此示例中为 2203193857
)大于最大值整数。因此,它默认为它可以存储的最大值 2147483647
(即:2^31 - 1)
考虑改用 BigInteger
列类型,它允许更大的数字。有关更多 SQLAlchemy 列类型,请参阅 https://docs.sqlalchemy.org/en/14/core/type_basics.html
我的 Flask 应用程序现在似乎无处不在,为我数据库中的 table 中的一列插入相同的值,而不管它以前在什么时候工作。
我这里有模特:
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
所以看起来在提交记录后,数字发生了变化,并且始终是同一个数字。我从未见过这样的问题,无法弄清楚发生了什么。
问题在于您的值的范围和值保存到的列的类型。
rma_number
列的 SQLAlchemy 列类型为 Integer
,但您传入的值(在此示例中为 2203193857
)大于最大值整数。因此,它默认为它可以存储的最大值 2147483647
(即:2^31 - 1)
考虑改用 BigInteger
列类型,它允许更大的数字。有关更多 SQLAlchemy 列类型,请参阅 https://docs.sqlalchemy.org/en/14/core/type_basics.html