Sqlalchemy не может адаптировать тип "builtin_function_or_method"

Я использую Celery с Flask и SQLAlchemy для хранения некоторых строк в базе данных. Все работает нормально, но когда я создал класс базы данных:

class Locations(db.Model):
    id = db.Column('id', db.Integer, primary_key=True)
    data = db.Column('data', db.String(50))

def insert():
    location="Madrid"
    l = Locations(id=id, data=location)
    db.session.add(l)
    db.session.commit()

И когда я получаю доступ к странице url, вызывается метод insert (), я получаю эту ошибку, которая, как я полагаю, имеет какое-то отношение к id:

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'builtin_function_or_method' [SQL: 'INSERT INTO locations (id, data) VALUES (%(id)s, %(data)s)'] [parameters: {'id': <built-in function id>, 'data': 'Oslo'}] (Background on this error at: http://sqlalche.me/e/f405)

Откуда в вашем методе insert () берется идентификатор? если «из ниоткуда», то есть метод id, встроенный в python, и это тот, который вы пытаетесь использовать ... и вы забываете круглые скобки и аргумент метода id ().

TonyMoutaux 10.09.2018 08:38
3
1
6 184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Избавьтесь от типов id и data, и все должно работать должным образом.

class Locations(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    data = db.Column(db.String(50))

def insert():
    location="Madrid"
    l = Locations(id=id, data=location) # You may want to remove id as well here as it will be autoincrement by default. 
   # So it can be l=Locations(data=location)
    db.session.add(l)
    db.session.commit()

спасибо, это странно. В прошлый раз, когда я смотрел документы, они требовали этих полей.

aikhs 10.09.2018 19:55

Другие вопросы по теме