PostgreSQL的ARRAY类型列阻止会话通过“ UndefinedColumn”错误提交()

时间:2019-08-15 06:00:08

标签: python postgresql sqlalchemy

我正在使用Postgresql作为方言在SQLAlchemy中创建一个关系数据库,并定义了一个列来存储postgresql.ARRAY类型,以及其他标准column-types。例如:

engine= create_engine('postgresql://localhost/test1',echo= False) 
base_object= declarative_base()

class AE_Class(base_object):
    __tablename__= 'AE_Table'

    date= Column(String, primary_key= True)
    experiment= Column(String)
    machine= Column(String)
    parameter1= Column(Integer)
    parameter2= Column(Integer)
    parameter3= Column(ARRAY(item_type= Integer,dimensions= 1))

    def __repr__(self):
        return "<AE_Class(date= '%s',experiment= '%s',machine= '%s',parameter1= '%s',parameter2= '%s',parameter3= '%s')>"%(\
        self.date, self.experiment, self.machine, self.parameter1, self.parameter2,self.parameter3)

这很好,我认为。然后,

base_object.metadata.create_all(engine)
session_maker_obj= sessionmaker(bind= engine)

然后,创建一条要添加到数据库的记录。这是我要添加的信息:

rho_prof= {'Time': np.arange(0,20),'AirDensity': np.arange(0,20)**2}
k= '02-23-2004'
v= {'Exp':'lin vs circ polarization','Machine':'LIDAR2','Var1':32, 
'Var2':0.9,'Var3':rho_prof}}

record1= AE_Class(machine= v['Machine'],date= k, experiment= v['Exp'], 
                          parameter1= v['Var1'],parameter2= v['Var2'],
                          parameter3= v['Var3']['AirDensity'])

现在,我打开一个会话并向其中添加record1

orm_session= session_maker_obj()
orm_session.add(record1)

当我通过orm_session.new检查会话时,可以看到该项目处于待处理状态并等待刷新:

>>> orm_session.new    
IdentitySet([<AE_Class(date= '02-23-2004',experiment= 'lin vs circ polarization',machine= 'LIDAR2',parameter1= '32',parameter2= '0.9',parameter3= '[  0   1   4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289
     324 361]')>])

但是,当我orm_session.commit()时,我收到错误消息(由于完整的追溯时间很长,因此被截断了):

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedColumn) column "parameter3" of relation "AE_Table" does not exist
LINE 1: ...table (date, experiment, machine, parameter1, parameter3...
                                                         ^

该列如何未定义? parameter3确实存在于AE_Table中,并且我已经在实例中定义了它。为什么SQLAlchemy会识别为未定义?

0 个答案:

没有答案