2017-05-27 3 views
0

J'ai une application flask et essaie de stocker un objet dans une base de données Postgres en utilisant SQLAlchemy.
je reçois l'erreur suivante:SQLAlchemy: impossible d'adapter le type 'dict'

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}] 

Mon modèle de l'événement:

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 

Il y a un organisateur avec l'id: 7 dans ma base de données.
J'ai déjà passé des heures à lire les journaux et à expérimenter.

Savez-vous ce qui ne va pas?

+1

Votre colonne '_polygon' spécifie un type de' Text' mais a la valeur par défaut '{}', qui est un 'dict'. – univerio

+0

Putain de merde tu es le meilleur! Tu avais raison, ça a corrigé mon erreur. Si vous soumettez une réponse, je peux la marquer comme résolue/acceptée. – Jan

+0

@Jan: vous pouvez (et devrait probablement dans ce cas) [répondre à votre propre question] (https://stackoverflow.com/help/self-answer) si personne n'a –

Répondre

0

La modification des deux lignes suivantes a corrigé l'erreur.

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


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