2013-03-03 84 views
0

我試圖開發一個使用龍捲風/ torndb的web應用程序,並且遇到了與我的數據庫交互的一些問題。我寫了一個包含torndb的「數據庫」類,以便爲我的Web應用程序提供一些常用的數據庫功能。當調用任何從我寫的數據庫類的方法似乎是與連接到數據庫的問題:Torndb(錯誤:根:在本地主機上連接到MySQL的錯誤)

我的構造函數打開「連接到MySQL的本地主機上的錯誤錯誤:根」

連接,所以我有點困惑,爲什麼我看到這個消息後,連接已打開。我希望這是一個我不瞭解的範圍和/或GC問題。我們的目標是爲一次,從而創建數據庫對象只是有 單個連接持續整個服務器的使用壽命,該數據庫存儲

下面的代碼片段不會如預期工作,這使我的作用域或GC的問題可能是:

#!/usr/bin/python 

import torndb 

class Database: 

def __init__(self): 

    try: 
     self.__dbh = torndb.Connection(
       'localhost', 
       'mydb', 
       user = 'myuser', 
       password = 'mypass') 
    except Exception as e: 
     print e 


def user_add(self, user, email, passwd): 

    insert = "INSERT INTO users (username, email, passwd) VALUES " + \ 
      "(%s, %s, %s)" % (user, email, passwd) 

    rowid = 0 
    try: 
     rowid = self.__dbh.execute(insert) 
    except Exception as e: 
     print e 

    if rowid is 0: 
     return (False, 'User exists'); 

    return (True, None) 


if __name__ == "__main__": 
print 'Testing' 
raw_input('Hit enter to connect to the DB') 

d = Database(); 


users = [] 

raw_input('Hit enter to create some users') 
for i in range(5): 
    users.append(str(i)) 
    d.user_add(users[i], users[i], users[i]) 

< - 喀嚓 - >

的問題是,當我嘗試創建從任何地方以外的其他模塊的主要數據庫對象定義數據庫類,例如:

import tornado.ioloop 
import tornado.httpserver 
import tornado.web 

from register import Register 
from logon import Logon 
from db import Database 

class Application(tornado.web.Application): 

def __init__(self): 

    resources = [ 
      (r"/logon", Logon), 
      (r"/register", Register) 
      ] 

    self.db = Database() 
    tornado.web.Application.__init__(self, resources) 
    try: 
     self.db.user_add('testuser', 'testemail', 'password') 
    except Exception as e: 
     print e 



if __name__ == "__main__": 

app = Application() 

# Start the server. 
server = tornado.httpserver.HTTPServer(app) 
server.listen(8080) 
tornado.ioloop.IOLoop.instance().start() 

以上時執行打印(由於調用自.__ dbh.execute()):

ERROR:根:錯誤連接到MySQL在localhost

的一些信息等位:

問題:

  • 爲什麼會出現差異,當我與分別創建數據庫對象的其他地方建立在定義類模塊的主要我的數據庫對象?

回答

1

的問題是由於傳遞到查詢不是字符串參數被轉義,有以下變化它的工作原理:

def user_add(self, user, email, passwd): 

    insert = "INSERT INTO users (username, email, passwd) VALUES " + \ 
      "(\'%s\', \'%s\', \'%s\')" % (user, email, passwd) 

    rowid = 0 
    try: 
     rowid = self.__dbh.execute(insert) 
    except Exception as e: 
     print e 

    if rowid is 0: 
     return (False, 'User exists'); 

    return (True, None) 
相關問題