2016-04-07 8 views
0

Ich versuche, mysql in meinem Python-Code zu verwenden, aber wenn ich eine Auswahlabfrage im Code ausführen, erhalte ich ein falsches Ergebnis.Python & Mysql Abfrage Problem - falsches Ergebnis

Hier ist mein app.py Code:

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() 

Hier mein createdb.py Code ist:

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() 

Hier ist meine index.html Code:

$def with (name) 

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

In Mein Fall, ich erwarte ein Ergebnis wie dieses;

Ich wollte nur sagen Hallo zu versuchen.

Allerdings bekomme ich das folgende Ergebnis;

Ich wollte nur hallo zu 1.

sagen, nachdem ich die Anwendung ausführen, ich meine MySQL Workbench überprüft und sah, dass die Datenbank als mydatabase aber die Tabelle erstellt wird nicht erstellt. Nachdem ich die Anwendung gestoppt und erneut ausgeführt habe, wurde jedoch ein Fehler angezeigt, der besagt, dass die Datenbank bereits existiert. Das ist in Ordnung, dann lege ich einen Kommentar vor diese Zeile, die die db erstellt. Nachdem ich die App erneut ausgeführt habe, tritt ein weiterer Fehler auf, der besagt, dass die Wörter Tabelle bereits vorhanden ist. Wie ich schon sagte, als ich die mysql workbench überprüfte, gab es keine solche Tabelle. Möglicherweise hängt dieses falsche Abfrageergebnis mit diesem Problem zusammen. Deshalb wollte ich es im Detail erklären.

Können Sie mir bitte sagen, was hier falsch ist? Vielen Dank im Voraus.

+1

Ich bin mir nicht sicher, wie es in Python funktioniert, aber am Terminal würde ich sagen 'mydatabase;' verwenden, d. H. 'Create database X; benutze X; create table ...; 'so dass MySQL _where_ kennt, um die Tabelle zu erstellen. Ich denke, wenn man die 'use' weglässt, werden die Tabellen in einem Standardschema erstellt. – PerlDuck

+2

Sie müssen '.fetchone()' oder '.fetchall()' z. 'cursor.execute (" SELECT name FROM wörter WHERE id = 3 "). fetchone()' – bernie

+0

Ich habe das versucht, aber ich habe einen Fehler wie ' at/ 'int' Objekt hat kein Attribut "Fetchone". Ich denke, das Problem ist, dass ich die Tabelle nicht erstellen kann, weil ich die verwandte Tabelle unter meiner Datenbank nicht finden kann, wenn ich meine mysql-Workbench überprüfe. –

Antwort

0

Nachdem ich meinen createdb.py Code geändert habe, löste ich mein Problem. Hier ist die modifizierte Version davon;

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() 

nicht, bekomme ich das Ergebnis, das ich will:

Ich wollte nur hallo sagen zu versuchen.