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

标签 postgresql foreign-keys sqlalchemy

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

相关文章:

mysql - 外键插入情况

sql - 如果不为null,则为唯一SQLAlchemy和Django

sql-server - 列是哪个表的键控

mysql - 尝试在 MySQL 中创建一个联合表,但外键不起作用

sqlalchemy - 如何使用 ColanderAlchemy 编辑现有记录?

python - Flask-SQLAlchemy - 何时创建和销毁表/数据库?

sql - 根据关联记录时区字段转换输入时区

sql - 如何选择显示自上次出现特定谓词以来的天数的行?

java - 如何设置 "volume: - postgres"Windows 10

database - 在postgresql中,导入csv文件后,序列号不同步