SQLAlchemy ORM и триггер для создания новой таблицы - на основе вставки уникальной строки в таблицу - PullRequest
0 голосов
/ 08 сентября 2018

Я новичок в SQLALchemy и использую SQLAlchemy ORM для настройки классов для построения таблиц Postgres. То, к чему я стремлюсь (основываясь на приведенном ниже примере), это определить / понять, как будет выглядеть метод создания новых таблиц. Я думаю, что триггер может быть использован вместе с функцией автоматического сопоставления SQLAlchemy для использования класса в качестве шаблона, такого как TemplateTable ниже, для создания новой таблицы и последующего заполнения ее данными.

Например, если пользователь вставит новую строку в table_name_a, important_value_a вызовет создание новой таблицы с именем table_name_a, которая затем будет заполнена значениями из table_name_b.

Я также полностью открыт для предложений, если это кажется странным способом справиться с этой задачей.

from sqlalchemy.orm import relationship, sessionmaker, session
from sqlalchemy.types import Integer, Float, String
from sqlalchemy import types, create_engine, inspect, MetaData, Table, Column, ForeignKey, ForeignKeyConstraint, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base

postgres_dbpostgres  = {'drivername': 'postgresql',
           'username': 'username',
           'password': 'password',
           'host': 'hosting_bits',
           'port': 5432,
           'database': '_db'}

PSQLengine = create_engine(URL(**postgres_dbpostgres), echo=True)

class Table_A(Base):
    __tablename__ = 'table_name_a'
    table_a_id = Column(Integer, index=True,unique=True,primary_key=True)
    important_value_a = Column(String(10), index=True, unique=True, nullable=False, primary_key=True)
    foo = Column(String(240))
    bar_float = Column(Float(precision=53, asdescimal=True))

class Table_B(Base):
    __tablename__ = 'table_name_b'
    table_b_id = Column(Integer, index=True, unique=True)
    table_b_uuid = Column(UUID(as_uuid=True), index=True, nullable=False, primary_key=True)
    important_value_a = Column(String(10),ForeignKey('table_name_a.important_value_a'),nullable=False)
    important_value_b = Column(String(10))
    important_value_c = Column(String(10))

class TemplateTable(object):
    __tablename__ = 'important_value_a'
    new_table_id = Column(Integer, primary_key=True)  
    important_value_b = Column(String(10))
    important_value_c = Column(String(10))

Base.metadata.create_all(PSQLengine)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...