如何在SQLObject Python类方法中获取数据库行ID(无需显式GET)
SQLObject中无需显式GET获取自动生成主键ID的方法
在SQLObject中,当你创建模型实例并插入数据库后,框架会自动将数据库生成的主键ID绑定到实例的id属性上,完全不需要额外的显式GET操作来获取这个值。
修正后的示例代码
from sqlobject import SQLObject, StringCol, ForeignKey, sqlhub, connectionForURI # 初始化数据库连接 sqlhub.processConnection = connectionForURI('sqlite:/:memory:') class Person(SQLObject): name = StringCol(length=50) def addAddress(self, street, city): # 直接通过self.id获取当前Person实例的主键ID Address(street=street, city=city, person_id=self.id) class Address(SQLObject): street = StringCol(length=100) city = StringCol(length=50) person_id = ForeignKey('Person') # 创建数据表 Person.createTable() Address.createTable() # 测试逻辑 p = Person(name="John Doe") p.addAddress("Main St", "New York") # 验证ID是否正确获取 print(f"Person ID: {p.id}") print(f"关联的Address: {Address.selectBy(person_id=p.id)[0].street}")
关键说明
- 当执行
p = Person(name="John Doe")时,SQLObject在完成数据库插入操作后,会自动从数据库取回生成的主键值,并赋值给p.id属性。 - 在类内部方法(比如
addAddress)中,直接使用self.id就能访问当前实例的主键ID,无需调用任何查询方法。 - 外键关联时,直接将
self.id传入关联模型的外键字段即可完成关联,整个过程不需要额外的数据库查询。
内容的提问来源于stack exchange,提问作者Ghisbo
相关产品推荐
相关产品推荐

