1

我有以下设置:

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 是一个字符串,数据库将 nick 列作为一个字符串......

4

1 回答 1

1

正如我们在您的评论中看到的那样,当您这样做时print(type(nick)),我们发现 for 的值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属性或可以用于字符串的东西?

于 2013-11-02T20:59:43.110 回答