【问题标题】:SQLAlchemy can't adapt type "builtin_function_or_method"SQLAlchemy 无法适应类型“builtin_function_or_method”
【发布时间】:2018-09-10 05:51:55
【问题描述】:

我正在使用带有 Flask 和 SQLAlchemy 的 Celery 将一些字符串存储到数据库中。一切正常,但是当我创建数据库类时:

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 方法,这是您尝试使用的方法......并且您忘记了 id() 方法的括号和参数。

标签: sqlalchemy


【解决方案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()

【讨论】:

  • 谢谢,这很奇怪。上次我查看了需要这些字段的文档。
猜你喜欢
  • 2017-10-28
  • 1970-01-01
  • 2019-11-10
  • 2020-09-15
  • 2021-03-04
  • 2018-11-17
  • 2018-11-10
  • 1970-01-01
相关资源
最近更新 更多