如何创建 table 条目的实例但未添加到 ponyorm 中?
How to create instance of a table entry but not added in ponyorm?
如何在不向相应的 Table.
插入行的情况下使用创建 table 定义的实例
比如我想要的是:
from pony import orm
from pony.orm import Required
db = orm.Database()
class User(db.Entity):
name = Required(str)
address = Optional(str)
db.bind(provider='sqlite', filename=':memory:')
db.generate_mapping(create_tables=True)
bob = User(name='bob')
### CODE FROM HERE ON IS WRONG BUT SHOWCASES WHAT I WANT
# So far the database has not been modified
bob.add() # at this point bob is added
db.commit() # transaction is committed
以上可能吗?我想要这个的原因是我想使用 class 定义而不向数据库添加项目。这只是确保所有用户(在此示例中)具有相同属性的非常简单干净的方法。
我最初使用的是 pyDAL
,我发现它很容易设置 table,但我必须定义 table,然后还要编写 class是的,所以我搬到了ponyorm
,但不清楚我是否能达到我想要的效果。
谢谢
更新 1:
一个示例用例是:
- 我正在抓取一个网站
- 我拉入"row"数据
- 如果地址尚不可用
- 创建用户实例
- 不添加它只是使用 class 作为数据的容器
- 如果信息可用
- 创建一个实例,只有当记录不存在时才添加它
基本上我希望能够使用 Class 作为信息的容器,而不必总是将其添加到数据库中。
作为 ORM 的 PonyORM 没有为这种情况提供任何东西。您仍然可以使用常规 python 词典或 类.
users = {} # id: info
因此,当您积累(或无论您做什么)信息时,您可以创建这样的对象。
@db_session
def insert_users():
for k, v in users.items():
User(id=k, **v)
如何在不向相应的 Table.
插入行的情况下使用创建 table 定义的实例比如我想要的是:
from pony import orm
from pony.orm import Required
db = orm.Database()
class User(db.Entity):
name = Required(str)
address = Optional(str)
db.bind(provider='sqlite', filename=':memory:')
db.generate_mapping(create_tables=True)
bob = User(name='bob')
### CODE FROM HERE ON IS WRONG BUT SHOWCASES WHAT I WANT
# So far the database has not been modified
bob.add() # at this point bob is added
db.commit() # transaction is committed
以上可能吗?我想要这个的原因是我想使用 class 定义而不向数据库添加项目。这只是确保所有用户(在此示例中)具有相同属性的非常简单干净的方法。
我最初使用的是 pyDAL
,我发现它很容易设置 table,但我必须定义 table,然后还要编写 class是的,所以我搬到了ponyorm
,但不清楚我是否能达到我想要的效果。
谢谢
更新 1:
一个示例用例是:
- 我正在抓取一个网站
- 我拉入"row"数据
- 如果地址尚不可用
- 创建用户实例
- 不添加它只是使用 class 作为数据的容器
- 如果信息可用
- 创建一个实例,只有当记录不存在时才添加它
基本上我希望能够使用 Class 作为信息的容器,而不必总是将其添加到数据库中。
作为 ORM 的 PonyORM 没有为这种情况提供任何东西。您仍然可以使用常规 python 词典或 类.
users = {} # id: info
因此,当您积累(或无论您做什么)信息时,您可以创建这样的对象。
@db_session
def insert_users():
for k, v in users.items():
User(id=k, **v)