【问题标题】:"Can't adapt type" error on a Foreign key attribute with SQLAlchemy/PostGreSQL使用 SQLAlchemy/PostGreSQL 的外键属性出现“无法调整类型”错误
【发布时间】:2011-05-01 20:43:21
【问题描述】:

我遇到了 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”识别为关系...

提前谢谢你 法比恩

【问题讨论】:

    标签: postgresql foreign-keys sqlalchemy


    【解决方案1】:

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

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

    然后使用该列分配 EventParameters 实例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 2013-09-19
      • 2019-09-15
      相关资源
      最近更新 更多