sqlalchemy之获取自增ID

背景

在flask项目中,引入sqlalchemy进行数据库交互。

数据库模型定义如下:

1
2
3
4
5
6
7
8
class QARecords(db.Model):
__tablename__ = 'qa_records'
id = db.Column(db.Integer, primary_key=True)
question = db.Column(db.Text)
answer = db.Column(db.String(1000))
feedback = db.Column(db.String(1000))
timestamp = db.Column(db.DateTime(), default=datetime.now)
description = db.Column(db.Text)

这里的id是自增的,无需自己定义。

创建对象:

1
qa = QARecords(question=question)

那么怎么获取这个对象的ID呢?

解决办法

在模型数据库这种方式中,直接定义数据库模型对象后,并不会生成具体id的

1
2
3
>>> qa = QARecords(question='something')
>>> print(qa.id)
None

由上可见,此时的对象的id为空。

id是由数据库自增生成的,所以需要在数据库中提交变更之后,才会生成具体的对象。

代码修改如下:

1
2
3
4
5
>>> qa = QARecords(question='something')
>>> db.session.add(qa)
>>> db.session.commit()
>>> print(qa.id)
1

通过提交一次数据库,通过sqlalchemy与数据库进行了一次交互,此时该对象才完整了。