Как создать экземпляр записи таблицы, но не добавлен в понымор? - PullRequest
0 голосов
/ 02 ноября 2018

Как я могу использовать создание экземпляра определения таблицы без вставки строки в соответствующую таблицу.

Например, что я хотел бы:

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:

Пример использования для этого:

  • Я очищаю веб-сайт
  • Я вытягиваю "ряд" данных
  • если адрес еще не доступен
    • Создать экземпляр пользователя
    • Не добавлять его просто используйте класс в качестве контейнера для данных
  • Если информация доступна
    • Создайте экземпляр и только если запись еще не существует, добавьте ее

По сути, я хочу иметь возможность использовать класс в качестве контейнера информации, не добавляя его в базу данных всегда.

1 Ответ

0 голосов
/ 03 ноября 2018

PonyORM как ORM ничего не предоставляет для этого случая. Вы по-прежнему можете использовать обычные словари или классы Python.

users = {} # id: info

Поэтому, когда вы накапливаете (или что-то еще делаете) информацию, вы можете создавать подобные объекты.

@db_session
def insert_users():
    for k, v in users.items():
        User(id=k, **v)
...