0
我有一些麻煩從SQLAlchemy的postgres數據庫中插入數據。 我的模式很簡單:無法在鏈接表中創建數據
它是由一個表過程它有兩個屬性(pk_process(PK)和版本),並且具有同時兩個屬性(fk_process表general_metadata(由PK和FK)和名稱)。 下面的代碼:
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()
我想不通爲什麼,但每當我試圖提交我得到:
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}]
如果我評論說,創建兩行,並添加general_metadata
,提交作品和過程的實例已創建。
這是我創建或關聯對象的方式嗎?
您的使用示例和錯誤詳細信息指的是'fk_person'字段,它不存在於'Process'表定義中。你的例子不完整嗎? –
的確......我把我的例子簡化得太多了。我剛剛編輯它。問題仍然是一樣的。 –