J'ai des problèmes lors de l'insertion de données dans ma base de données postgres à partir de SQLAlchemy. Mon schéma est assez simple:Impossible de créer des données dans une table liée
Il est composé d'un processus tableau qui a deux attributs (pk_process (PK) et Version) et un general_metadata de table qui a également deux attributs (fk_process (PK et FK) et nom). Voici le code:
import uuid
from sqlalchemy import Column, ForeignKey, Text, text, create_engine
from sqlalchemy.dialects.postgresql.base import UUID
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
CONNEXION_URL = 'postgresql://postgres:[email protected]/elsa_data_test'
engine = create_engine(CONNEXION_URL, echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base = declarative_base()
metadata = Base.metadata
class Process(Base):
__tablename__ = 'process'
pk_process = Column(UUID, primary_key=True)
fk_person = Column(UUID, nullable=False)
version = Column(Text, nullable=False)
class GeneralMetadata(Process):
__tablename__ = 'general_metadata'
fk_process = Column(ForeignKey('process.pk_process', ondelete='CASCADE', onupdate='CASCADE', match='FULL'),
primary_key=True)
name = Column(Text, nullable=False)
process = relationship("Process")
process = Process(pk_process=uuid.uuid4().hex, fk_person=uuid.uuid4().hex, version='V1')
session.add(process)
general_metadata = GeneralMetadata(process=process, name='meta_name')
# process.general_metadata = general_metadata I also tried this
session.add(general_metadata)
session.commit()
Je ne peux pas comprendre pourquoi, mais chaque fois que j'essaie de commettre je reçois:
sqlalchemy.exc.IntegrityError: (psycopg2.IntegrityError)
ERREUR: une valeur NULL viole la contrainte NOT NULL de la colonne « pk_process »
DETAIL: La ligne en échec contient (null, null, null)
[SQL: 'INSERT INTO process (fk_person) VALUES (%(fk_person)s) RETURNING process.pk_process'] [parameters: {'fk_person': None}]
Si je commente les deux lignes qui crée et ajoute general_metadata
, la validation des œuvres et un instance de processus est créée.
Est-ce quelque chose qui fonctionne dans la façon dont je crée ou associe des objets?
Votre exemple d'utilisation et les détails de l'erreur se rapportent au fichier 'fk_person' qui n'est pas présent dans la définition de la table' Process'. Votre exemple est incomplet? –
En effet ... j'ai minimisé mon exemple un peu trop. Je viens de l'éditer. Le problème est toujours le même. –