2017-05-27 90 views
0

我有一個燒瓶應用程序,並嘗試使用SQLAlchemy將對象存儲在Postgres數據庫中。
我得到以下錯誤:SQLAlchemy:無法調整類型'字典'

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 
'dict' [SQL: 'INSERT INTO events (organizer_id, name, date, _address, 
_polygon, starter_time, main_time, dessert_time, afterparty_flag, 
afterparty_address, afterparty_description) VALUES (%(organizer_id)s, % 
(name)s, %(date)s, %(_address)s, %(_polygon)s, %(starter_time)s, % 
(main_time)s, %(dessert_time)s, %(afterparty_flag)s, %(afterparty_address)s, % 
(afterparty_description)s) RETURNING events.id'] [parameters: {'organizer_id': 
7, 'name': 'testevent', 'date': datetime.datetime(2017, 5, 27, 19, 8, 38, 
90484), '_address': None, '_polygon': {}, 'starter_time': 
datetime.datetime(2017, 5, 27, 19, 8, 38, 90500), 'main_time': 
datetime.datetime(2017, 5, 27, 19, 8, 38, 90508), 'dessert_time': 
datetime.datetime(2017, 5, 27, 19, 8, 38, 90514), 'afterparty_flag': True, 
'afterparty_address': None, 'afterparty_description': None}] 

我的事件模型:

class Event(db.Model): 
__tablename__ = 'events' 
id = db.Column(db.Integer, primary_key=True) 
organizer_id = db.Column(db.Integer, db.ForeignKey('organizers.id')) 

# general 
name = db.Column(db.String(64)) 
date = db.Column(db.DateTime(), default=datetime.utcnow) 
_address = db.Column(db.Text(), default={}) 
_polygon = db.Column(db.Text(), default={}) 

# timetable 
starter_time = db.Column(db.DateTime(), default=datetime.utcnow) 
main_time = db.Column(db.DateTime(), default=datetime.utcnow) 
dessert_time = db.Column(db.DateTime(), default=datetime.utcnow) 

# afterparty 
afterparty_flag = db.Column(db.Boolean(), default=True) 
afterparty_address = db.Column(db.String(140)) 
afterparty_description = db.Column(db.String(140)) 

postcode = None 
city = None 

沒有與該ID的組織者:在我的數據庫7。
我已經花了數小時閱讀日誌和試驗。

你知道怎麼回事嗎?

+1

您的'_polygon'列指定了一種'Text'類型,但默認值爲{{}',這是一個'dict'。 – univerio

+0

聖潔的狗屎,你是最好的!你是對的,這解決了我的錯誤。如果您提交答案,我可以將其標記爲已解決/已接受。 – Jan

+0

@Jan:你可以(也可以在這種情況下)[回答你自己的問題](https://stackoverflow.com/help/self-answer)如果沒有人 –

回答

0

以下兩行的更改修復了錯誤。

_address = db.Column(db.Text(), default={}) 
_polygon = db.Column(db.Text(), default={}) 


_address = db.Column(db.Text(), default="") 
_polygon = db.Column(db.Text(), default="")