gpt4 book ai didi

postgresql - "Can' t adapt type"错误关于 SQLAlchemy/PostGreSQL 的外键属性

转载 作者:行者123 更新时间:2023-11-29 13:37:51 24 4
gpt4 key购买 nike

我遇到了 PostGreSQL 8.4 和表反射的问题。我的元数据对象似乎没问题(它有外键、主键、每个列和表)。但是当我尝试通过外键将一个对象关联到另一个对象时,我得到:“sqlalchemy.exc.ProgrammingError: (ProgrammingError) can't adapt type 'EventParameters' 'INSERT INTO event (".

我正在使用 SQLAlchemy 0.6.3 (psycopg2 2.2.1) 和 PostGreSQL 8.4.5

在这里,我的代码:


#! /usr/bin/env python

from sqlalchemy import MetaData, create_engine
from sqlalchemy.orm import mapper, sessionmaker

class EventParameters(object):
pass

class Event(object):
pass

engine = create_engine('postgresql://postgres:toto@127.0.0.1:5432/renass')
metadata = MetaData()
metadata.reflect(bind=engine)
Session = sessionmaker(bind=engine)
session = Session()
mapper(EventParameters, metadata.tables['eventparameters'])
mapper(Event, metadata.tables['event'])

ep = EventParameters()
ep.publicid = 'test'

e = Event()
e.publicid = 'test'
e.eventparametersid=ep

session.add(e)
session.commit()

和我的数据库:


CREATE TABLE EventParameters (
id SERIAL PRIMARY KEY,
publicID varchar(255) UNIQUE NOT NULL,
description varchar(255),
creationInfo_agencyID varchar(64),
creationInfo_agencyURI varchar(255),
creationInfo_author varchar(128),
creationInfo_authorURI varchar(255),
creationInfo_creationTime time,
creationInfo_version varchar(64)
);

CREATE TABLE Event (
id SERIAL PRIMARY KEY,
eventParametersID integer NOT NULL REFERENCES EventParameters(id),
publicID varchar(255) UNIQUE NOT NULL,
preferredOriginID integer,
preferredMagnitudeID integer,
preferredFocalMechanismID integer,
type EventType,
typeCertainty EventTypeCertainty,
creationInfo_agencyID varchar(64),
creationInfo_agencyURI varchar(255),
creationInfo_author varchar(128),
creationInfo_authorURI varchar(255),
creationInfo_creationTime time,
creationInfo_version varchar(64)
);

似乎 SQLAlchemy 没有将属性“eventparametersid”识别为关系......

提前谢谢你法比安

最佳答案

为了使您的代码正常工作,您应该更改 Event 类的映射器调用以包含两个类之间的映射

mapper(Event, metadata.tables['event'], properties={
'eventparameters': relation(EventParameters)
})

然后使用该列来分配 EventParameters 实例

ep = EventParameters()
ep.publicid = 'test'

e = Event()
e.publicid = 'test'
e.eventparameters = ep

关于postgresql - "Can' t adapt type"错误关于 SQLAlchemy/PostGreSQL 的外键属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042783/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com