1

如何在不向相应表中插入行的情况下使用创建表定义的实例。

例如我想要的是:

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

以上可能吗?我想要这个的原因是我想使用类定义而不向数据库添加项目。这只是一种确保各地用户(在本例中)具有相同属性的非常简单干净的方法。

我最初使用pyDAL它,我发现设置表非常容易,但我必须定义表,然后还要编写类,所以我搬到了那里,ponyorm但不清楚我是否能实现我想要的。

谢谢你

更新 1:

一个示例用例是:

  • 我正在抓取一个网站
  • 我拉入“行”数据
  • 如果地址尚不可用
    • 创建用户实例
    • 不添加它只是将类用作数据的容器
  • 如果信息可用
    • 创建一个实例,并且仅当记录不存在时才添加它

基本上我希望能够将类用作信息的容器,而不必总是将其添加到数据库中。

4

1 回答 1

1

PonyORM 作为 ORM 没有为这种情况提供任何东西。您仍然可以使用常规的 Python 字典或类。

users = {} # id: info

因此,当您积累(或无论您在做什么)信息时,您可以创建这样的对象。

@db_session
def insert_users():
    for k, v in users.items():
        User(id=k, **v)
于 2018-11-03T14:00:06.277 回答