Я новичок в 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)