SQLAlchemy不支持的类型问题Python

时间:2013-11-02 20:06:55

标签: python sqlalchemy bots

我有以下设置:

from flask import Flask
from sqlalchemy import Table, Column, Integer
from flask.ext.sqlalchemy import SQLAlchemy
import os

basedir = os.path.abspath(os.path.dirname(__file__))
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///offences.db'
offencedb = SQLAlchemy(app)


class Offences(offencedb.Model):
      id = offencedb.Column(offencedb.Integer, primary_key=True)
      nick = offencedb.Column(offencedb.String(100), unique=True)
      offences = offencedb.Column(offencedb.Integer)  

      def __init__(self, nick, offences):
          self.nick = nick
          self.offences = offences

      def __repr__(self):
          return '<Nick %r>' % self.nick

如果我尝试以下列方式使用该模型:

offencesquery = Offences.query.filter_by(nick = nick).first()

我收到以下错误:

Error binding parameter 0 - probably unsupported type.

但是nick是一个字符串,数据库将缺口列作为字符串...

1 个答案:

答案 0 :(得分:1)

正如我们在您的评论中看到的,当您print(type(nick))时,我们发现nick的值实际上并不是一个字符串,就像您假设的那样。相反,它是一个Libraries.biblib.nickclass对象。因此,当你做...

offencesquery = Offences.query.filter_by(nick = nick).first()

...您基本上是在为nick字段具有Python对象(nickclass对象)的值的所有攻击创建SQL查询。这没有意义:SQL不理解对象,它理解字符串和整数等。 SQLAlchemy试图将该对象转换为SQL可以理解的并且失败的东西。因此,错误消息。如果你写过......

nick = 'Test'
offencesquery = Offences.query.filter_by(nick = nick).first()

...那么你的代码就可以了。也许您的nickclass对象有一个nickname属性或者您可以用于字符串的东西?