2013-11-02 61 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

相關問題