распространенные способы заполнения и запроса интегрированных объединений, использующие отношения виртуальных столбцов SQLAlchemy для достижения наилучшего эффекта, flask? - PullRequest
0 голосов
/ 05 марта 2020

Как и почему SQLAlchemy облегчает создание виртуальных столбцов, стало для меня более очевидным, и теперь, когда у меня установлены двунаправленные отношения между родительскими и дочерними таблицами, каковы некоторые объектно-ориентированные способы, которыми эти таблицы могут быть заполняется и запрашивается, чтобы наилучшим образом использовать такие отображения Python -национальным образом?

Если есть лучший способ представить здесь отношения, возможно, с помощью таблицы ассоциаций, мне также интересно изучить словарь и шаблоны, уникальные для SQLAlchemy, которые позволили бы использовать такую ​​сущность там, где это полезно.

from datetime import datetime
from dataclasses import dataclass, InitVar, field
from typing import Any, List, ClassVar

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# from flask_login import UserMixin

from sqlalchemy import Column, Integer, String
from sqlalchemy import ForeignKey
from sqlalchemy.types import Boolean, DateTime
from sqlalchemy.orm import relationship
# import sqlalchemy.dialects.sqlite


# db = SQLAlchemy()
app = Flask(__name__.split('.')[0])
class Vars():
    prefix = "classic"

app.config.__setitem__('SQLALCHEMY_DATABASE_URI', f'sqlite:///{Vars.prefix}.sqlite')
app.config['SQLALCHEMY_BINDS'] = {
    Vars.prefix: app.config.get('SQLALCHEMY_DATABASE_URI')
    }

app.config.__setitem__('SQLALCHEMY_TRACK_MODIFICATIONS', False)

db = SQLAlchemy(app)


@dataclass
class U_Mixin(db.Model): # (object) if not __abstract__ = True
    wabisabi: ClassVar
    id: int

    __abstract__ = True # use if inheriting from db.Model
    __bind_key__ = ""

    id = Column(Integer, primary_key=True, nullable=False)

@dataclass
class Parent(U_Mixin):
    parentname: str

    __bind_key__ = Vars.prefix
    parentname = Column(String)
    child_id = Column(Integer, ForeignKey('child.id'))
    children = relationship('Parent', backref='children')

@dataclass
class Child(U_Mixin):
    childname: str

    __bind_key__ = Vars.prefix
    childname = Column(String)
    parent_id = Column(Integer, ForeignKey('parent.id'))
    parents = relationship('Child', backref='parents')

if __name__=="__main__":
    db.create_all()
...