J'essaie d'utiliser Sqlalchemy avec MySQL pour créer une mappage de table pour une table avec une clé primaire composite, et je ne sais pas si je le fais bien. La table existante est définie avec la clé primaire composite.
Voici la définition de la classe de mappage:
class table1(Base):
__tablename__ = 'table1'
col1 = Column(String, primary_key=True)
col2 = Column(String, primary_key=True)
col3 = Column(String)
def __init__ = (self, col1, col2, col3):
self.col1 = col1
self.col2 = col2
self.col3 = col3
ceci correspond déjà à un enregistrement dans la base de données A = Table1 ("test", "test", "test")
Si j'ajoute ceci à la session et ajoute les enregistrements dans le tableau, puis travaillez avec les données, j'obtiens une erreur MySQL (entrée en double 1062).
session.add(a)
b = session.query(table1)
for instance in b:
print(instance.col1, instance.col2)
Si je travaille avec une table unique, je reçois cette erreur à la place:
New instance <table2 at 0x2f204d0> with identity key
(<class '__main__.table2'>,('test',)) conflicts with
persistent instance <table2 at 0x2f88770>
Suis-je en définissant la clé primaire composite incorrectement? Sinon, qu'est-ce que je fais de mal à faire plus loin pour moi d'obtenir l'erreur MySQL au lieu d'une erreur Python/Sqlalchemy?
Je conviens que la question est vague. Mais vous pouvez utiliser ce qui suit comme ligne directrice. Cela choisira à partir d'un trial1
Tableau dans une base de données test
dans MySQL. Les pièces commentées sont présentes comme une autre façon de configurer les principales contraintes principales.
from sqlalchemy import String, create_engine, MetaData, Column
from sqlalchemy.ext.declarative import declarative_base
# from sqlalchemy.schema import PrimaryKeyConstraint
from sqlalchemy.orm import sessionmaker
engine = create_engine('mysql+pymysql://root:[email protected]/test')
metadata = MetaData(bind=engine)
Base = declarative_base(metadata=metadata)
class TableClassName(Base):
__tablename__ = 'table1'
col1 = Column(String, primary_key=True)
col2 = Column(String, primary_key=True)
col3 = Column(String)
# __table_args__ = (
# PrimaryKeyConstraint(
# col1,
# col2),
# {})
Session = sessionmaker(bind=engine)
session = Session()
b = session.query(TableClassName)
for instance in b:
print(instance.col1, instance.col2)