79108390

Date: 2024-10-21 02:32:43
Score: 1.5
Natty:
Report link

Solved by the following. Retains the ability to use Main.query.all() functionality. Thanks for the pointer, @snakecharmerb.

__init__.py

#Model Base Class
class Base(DeclarativeBase, MappedAsDataclass):
    pass


app = Flask(__name__)
app.json = BetterJsonProvider(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://login:passwd@localhost/db"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
CORS(app)

db = SQLAlchemy(app, model_class=Base)

"Dataclasses" now look like this:

class Main(db.Model):
    __tablename__="main"
    id: int = db.Column(db.Integer, primary_key=True)
    ones: Mapped[List[One]] = db.relationship("One", secondary="manys", overlaps="many,one")

class Many(db.Model):
    __tablename__ = "manys"

    main_id = db.Column(db.Integer, db.ForeignKey("main.id"), primary_key=True)
    one_id = db.Column(db.Integer, db.ForeignKey("one.id"), primary_key=True)
    x = db.Column(db.Boolean, nullable=False, default=False)

class One(db.Model):
    __tablename__ = "ones"

    id: int = db.Column(db.Integer, primary_key=True)

    name: str = db.Column(db.String, nullable=False)
    other_id: int = db.Column(db.Integer, nullable=False)

    many_link = db.relationship("Many", backref="ones", uselist=False)
    many_x: Mapped[bool] = association_proxy("many_link", "x", default_factory=bool)
Reasons:
  • Blacklisted phrase (0.5): Thanks
  • Long answer (-1):
  • Has code block (-0.5):
  • User mentioned (1): @snakecharmerb
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: ImonFyre