我遇到了 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/