storage-orm

Python for using in-memory storage with ORM


License
Apache-2.0
Install
pip install storage-orm==1.1.8

Documentation

StorageORM (OTUS проСктная Ρ€Π°Π±ΠΎΡ‚Π°)

Зависимости
Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования (всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€)
  1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ классов
        from storage_orm import StorageORM
        from storage_orm import RedisORM
        from storage_orm import RedisItem
        from storage_orm import OperationResult
  2. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ модСль
        class ExampleItem(RedisItem):
            """
                Атрибуты ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…
                  (Π² процСссС сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π‘Π” приводится Ρ‚ΠΈΠΏ)
            """
            date_time: int
            any_value: float
    
            class Meta:
                """
                    БистСмный прСфикс записи Π² Redis
                    ΠšΠ»ΡŽΡ‡ΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² прСфиксС ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ для
                      ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ создания экзСмпляра
                """
                table = "subsystem.{subsystem_id}.tag.{tag_id}"
  3. Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ORM ΠΌΠΎΠΆΠ½ΠΎ двумя способами
    1. ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ нСпосрСдствСнно Π² ORM
          orm: StorageORM = RedisORM(host="localhost", port=8379, db=1)
    2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ redis.Redis ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² конструктор
          redis: redis.Redis = redis.Redis(host="localhost", port=8379, db=1)
          orm: StorageORM = RedisORM(db=redis)
  4. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅/Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ записи (ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ записи ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π² Meta.table ΠΌΠΎΠ΄Π΅Π»ΠΈ)
    1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π½Π° основС ΠΌΠΎΠ΄Π΅Π»ΠΈ
          example_item: ExampleItem = ExampleItem(
              subsystem_id=3,
              tag_id=15,
              date_time=100,
              any_value=17.
          )
    2. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ вставку ΠΌΠΎΠΆΠ½ΠΎ нСсколькими способами
      1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ save() созданного экзСмпляра
            operation_result: OperationResult = example_item.save()
      2. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ save() StorageOrm
            operation_result: OperationResult = orm.save(item=example_item)
      3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΡƒΡŽ вставку записСй (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ вставки)
            operation_result: OperationResult = orm.bulk_create(
                items=[example_item1, example_item2]
            )
  5. Π’Ρ‹Π±ΠΎΡ€ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π‘Π”
    • для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Meta.table
          table = "subsystem.{subsystem_id}.tag.{tag_id}"
                                   ^               ^
      , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
          example_items: list[exampleitem] = exampleitem.get(subsystem_id=3, tag_id=15)
  6. ИспользованиС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€)
    • для использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ StorageItem.using(db_instance=...) ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ соСдинСниС с Π‘Π” Redis, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
          redis_another: redis.Redis = redis.Redis(host="localhost", port=8379, db=17)
          ...
          result_of_operation: OperationResult = example_item.using(db_instance=redis_another).save()
Запуск ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²
    python -m venv venv
    source ./venv/bin/activate
    pip install redis

    # Π‘Π°Π·ΠΎΠ²Ρ‹ΠΉ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€
    PYTHONPATH="${PYTHONPATH}:." python examples/redis_1_single.py

    # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π³Ρ€ΡƒΠΏΠΏΠΎΠ²ΠΎΠΉ вставки (bulk)
    PYTHONPATH="${PYTHONPATH}:." python examples/redis_2_bulk_multiple.py

    # ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ
    PYTHONPATH="${PYTHONPATH}:." python examples/redis_3_using_multiple_connections.py