Advertisement
Guest User

Untitled

a guest
Jul 27th, 2022
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.11 KB | None | 0 0
  1. from fastapi import Depends, FastAPI
  2. from sqlalchemy import Column, ForeignKey, Integer, create_engine, String, Integer, Table
  3. from sqlalchemy.orm import sessionmaker, relationship
  4. from sqlalchemy.ext.declarative import declarative_base
  5.  
  6. SQLALCHEMY_DATABASE_URL = "sqlite:///./sql_app.db"
  7.  
  8. engine = create_engine(
  9.     SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}
  10. )
  11.  
  12. SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
  13.  
  14. Base = declarative_base()
  15.  
  16.  
  17. def get_db():
  18.     db = SessionLocal()
  19.     try:
  20.         yield db
  21.     finally:
  22.         db.close()
  23.  
  24.  
  25. counterparties_documents = Table(
  26.     "counterparties_documents",
  27.     Base.metadata,
  28.     Column("counterparty_id", ForeignKey(
  29.         "counterparties.id"), primary_key=True),
  30.     Column("document_id", ForeignKey(
  31.         "documents.id"), primary_key=True)
  32. )
  33.  
  34.  
  35. class Document(Base):
  36.     __tablename__ = "documents"
  37.  
  38.     id = Column(Integer, primary_key=True, index=True)
  39.     name = Column(String, index=True)
  40.  
  41.     counterparties = relationship(
  42.         "Counterparty", secondary=counterparties_documents, back_populates="documents")
  43.  
  44.  
  45. class Counterparty(Base):
  46.     __tablename__ = "counterparties"
  47.  
  48.     id = Column(Integer, primary_key=True, index=True)
  49.     name = Column(String, index=True)
  50.  
  51.     documents = relationship(
  52.         "Document", secondary=counterparties_documents, back_populates="counterparties")
  53.  
  54.  
  55. app = FastAPI()
  56.  
  57. Base.metadata.create_all(bind=engine)
  58.  
  59. # Run route "/" twice and get:
  60. # ----------------------------------------
  61.  
  62. # sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: counterparties.id
  63. # [SQL: INSERT INTO counterparties (id, name) VALUES (?, ?)]
  64. # [parameters: (1, 'Someone Limited')]
  65. # (Background on this error at: https://sqlalche.me/e/14/gkpj)
  66.  
  67.  
  68. @app.get("/")
  69. async def root(db: SessionLocal = Depends(get_db)):
  70.  
  71.     db_document = Document(name="Document name", counterparties=[
  72.         Counterparty(id=1, name="Someone Limited")])
  73.  
  74.     db.add(db_document)
  75.     db.commit()
  76.     db.refresh(db_document)
  77.     return db_document
  78.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement