2016-04-07 8 views
0

Pythonコードでmysqlを使用しようとしていますが、コードでselectクエリを実行すると間違った結果になります。ここでPythonとMySQLのクエリの問題 - 間違った結果

は私app.pyコードです:ここでは

import web 
import pymysql 
import createdb 

render = web.template.render('templates/') 

urls = (
    '/', 'index' 
) 

class index: 
    def GET(self): 
     createdb.createTables() 
     result = createdb.select() 
     return render.index(result) 


if __name__ == "__main__": 
    app = web.application(urls, globals()) 
    app.run() 

は私createdb.pyコードです:ここで

import pymysql 

# Connect to the database 
connection = pymysql.connect(host='localhost', 
          port=3306, 
          user='root', 
          password='xxxx', 
          db='mysql', 
          charset='utf8', 
          cursorclass=pymysql.cursors.DictCursor) 

def createTables(): 
    cursor = connection.cursor() 
    cursor.execute("CREATE DATABASE mydatabase") 
    cursor.execute("CREATE TABLE words(id INT, name VARCHAR(255))") 
    cursor.execute("INSERT INTO words(id, name) VALUES(1, 'look')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(2, 'book')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(3, 'try')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(4, 'read')") 


def select(): 
    cursor = connection.cursor() 
    selectResult = cursor.execute("SELECT name FROM words WHERE id = 3") 
    return selectResult 

if __name__ == "__main__": 
    createTables() 

は私のindex.htmlコードです:では

$def with (name) 

$if name: 
    I just wanted to say <em>hello</em> to $name. 
$else: 
    <em>Hello</em>, world! 

私の場合、私はこのような結果を期待しています。

私はちょうどこんにちはと言ってみたかったです。

しかし、私は以下の結果を得ています。

は、私はちょうど私がアプリケーションを実行した後、私は私のMySQLのワークベンチを確認し、データベースが てMyDatabaseとして作成されているのを見ました こんにちは 1.

を言いたかったが、テーブルではありませんでした作成した。しかし、アプリケーションを停止して再実行すると、データベースがすでに存在しているというエラーが表示されます。それは大丈夫です、そして私はdbを作成する行の前にコメントを入れました。アプリを再実行すると、別のエラーが発生し、という単語テーブルが既に存在していると表示されます。私が前に言ったように、私がmysql workbenchをチェックしたとき、そのようなテーブルはありませんでした。おそらく、この間違ったクエリの結果はこの問題と関連しています。それで、私はそれを詳細に説明したかったのです。

ここで何が間違っているのか教えてください。前もって感謝します。

+1

私はPythonでどのように動作するのか分かりませんが、端末では 'use mydatabase;'と言う必要があります。 Xを使用する。テーブルを作成するためにMySQLが知っているように、テーブルを作成してください;;;私は 'use'を省略すると、デフォルトのスキーマでテーブルが作成されると思います。 – PerlDuck

+2

'.fetchone()'や '.fetchall()'を呼び出す必要があります。 fetchone() ' – bernie

+0

私はそれを試みましたが、' 、/ のようなエラーが発生しました。 'int'オブジェクトに属性がありません'フェッチン'。問題は、私は私のmysqlのワークベンチをチェックすると、私のデータベースの下に関連するテーブルを見つけることができないので、私はテーブルを作成することはできないと思う。 –

答えて

0

createdb.pyコードを変更した後、私は問題を解決しました。ここにその変更版があります。

import pymysql 

# Connect to the database 
connection = pymysql.connect(host='localhost', 
          port=3306, 
          user='root', 
          password='xxxxx', 
          db='mydatabase', 
          charset='utf8', 
          cursorclass=pymysql.cursors.DictCursor) 

def createTables(): 
    cursor = connection.cursor() 
    cursor.execute("CREATE TABLE words(id INT, name VARCHAR(255))") 
    cursor.execute("INSERT INTO words(id, name) VALUES(1, 'look')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(2, 'book')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(3, 'try')") 
    cursor.execute("INSERT INTO words(id, name) VALUES(4, 'read')") 
    connection.commit() 

def select(): 
    cursor = connection.cursor() 
    cursor.execute("SELECT name FROM words WHERE id = 3") 
    selectResult = cursor.fetchone() 
    value = "%s" % (selectResult["name"]) 
    return value 

if __name__ == "__main__": 
    createTables() 
    connection.close() 

ない、私は私が望む結果を得る:私はちょうどしようとするこんにちはを言いたかった

を。