2013-11-02 34 views
1

我有以下设置:SQLAlchemy的不受支持的类型问题的Python

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. 

但是尼克是一个字符串,数据库有尼克列作为字符串...

+0

嗨!你已经做了一个很好的工作,创建一个代码示例来演示你的问题。我修改了一下你的问题(我删除了一些与这个问题无关的东西,并从标题中删除了“IRC BOT”,因为在你的情况下,你正在为机器人做这件事,其他人可能会遇到这个相同的问题,但不是写一个IRC机器人(所以标题会有点分心) –

+0

谢谢,没问题 - 我可以看到你的观点:)我会记得下一次 – nef

+0

我刚刚运行你的代码在我的安装程序,并没有遇到问题。你能完成你的代码示例,包括你如何定义你的“nick”变量吗? –

回答

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属性或者你可以用于你的字符串的东西?

+0

好吧,但尼克作为变量传递,所以我不能做尼克=“布拉赫”我该如何解决这个问题:)非常感谢。 – nef

+1

嗯,这是你自己去弄清楚的。当然,在你的代码中你可以访问你正在尝试查找的实际字符串。如果您不知道要查找的名称,则无法编写SQL脚本来查找名称。基于[此代码](https://github.com/necavi/Serva/blob/master/Libraries/biblib.py#L11),您可能需要执行'nick.nick'。 –

+0

感谢您彻底解释一切:D – nef

相关问题