2017-03-02 4 views
0

Dies ist ein Anfänger Versuch zum Einfügen von Daten in eine MySQL-Tabelle mit Kolben. Ich kann Daten in das Formular eingeben, aber es fügt die Daten nicht ein. Ich verwende pythonanywhere, so dass die Fehlermeldung ist nicht klar, ...Python Flask Einfügen von Daten aus Formular

Transactions.html:

<h1>Enter a Transaction</h1> 

<form action="/transactions" method=post> 
    <dl> 
     <dt>Sale Item: 
     <dd><input type=text name="Item" required/> 
     <dt>Shack: 
     <dd><input type=text name="Shack" required/> 
     <dt>Reference: 
     <dd><input type=text name="Paym_Reference" required/> 
     <dt>Amount: 
     <dd><input type=text name="Amount" required/> 
    </dl) 
    <br> 
<p><input type=submit value=Enter> 
    </form> 

MySQL: transactions

+----------------+-------------+------+-----+---------+----------------+ 
| Field   | Type  | Null | Key | Default | Extra   | 
+----------------+-------------+------+-----+---------+----------------+ 
| trans_id  | int(11)  | NO | PRI | NULL | auto_increment | 
| Item   | varchar(20) | YES |  | NULL |    | 
| Shack   | varchar(10) | YES |  | NULL |    | 
| Paym_Reference | varchar(20) | YES |  | NULL |    | 
| Amount   | int(10)  | YES |  | NULL |    | 
+----------------+-------------+------+-----+---------+----------------+ 

Code:

import MySQLdb as my 
conn = my.connect ('hello.mysql.pythonanywhere-services.com','hello','password','SIIL$Transactions') 
c = conn.cursor() 

@app.route('/add_data', methods=['GET', 'POST']) 
def add_data(): 
    Item= request.form('Item') 
    Shack= request.form('Shack') 
    Paym_Reference= request.form('Paym_Reference') 
    Amount= request.form('Amount') 
    c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES ('',%s,%s,%s,%s)") 
    conn.commit() 
    return 'Done' 

@app.route('/transactions', methods=['GET', 'POST']) 
def transactions(): 
    add_data() 
    return render_template('Transactions.html') 

Antwort

1

Sie haben einen Fehler in der SQL-Abfrage

Ihr Code:

c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES ('',%s,%s,%s,%s)") 

korrekte Insert

c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES (%s,%s,%s,%s)") 

Ein weiteres Beispiel aus w3schools

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country) 
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway'); 
2

PythonAnywhere Entwickler hier - Sie sollten die gleichen Fehlermeldungen auf unserem System als auf jeder bekommen Sonstiges - hast du das Fehlerprotokoll für deine Web App überprüft?

Es gibt ein paar Probleme mit Ihrem Code. Wie Stanislav Filin sagt, sollte die leere Zeichenfolge in SQL, die Sie an c.execute übergeben, nicht dort sein; Sie geben vier Spalten an, sodass Sie nur vier Werte benötigen.

Aber Sie müssen auch einige Werte zum Einfügen übergeben. Die SQL-Zeichenfolge ist nur ein Befehl zum Senden an die Datenbank, und Sie müssen dem System mitteilen, welche Werte die %s s ersetzen sollen, wenn dies der Fall ist.

Also statt

c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES ('',%s,%s,%s,%s)") 

... sollten Sie

c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES (%s,%s,%s,%s)", (Item, Shack, Paym_Reference, Amount)) 

this help page Beispiele für mehr sehen.

Eine letzte Sache - die Verwendung der MySQL-Bibliothek direkt in einer Flask-App wird wirklich ziemlich hart sein. Es gibt eine Menge Komplexität bei der Verwendung, insbesondere im Zusammenhang mit dem Verbindungsmanagement. Der Code, den Sie oben angegeben haben, funktioniert nur für einen einzelnen Benutzer Ihrer Site und nur so lange, wie er nicht länger als das Verbindungs-Timeout der Datenbank inaktiv ist (fünf Minuten bei PythonAnywhere), aber dann bricht er mit verwirrenden Fehlermeldungen.

SQLAlchemy ist ein hervorragendes Tool, das Sie zwischen Ihrem Flask-Code und der Datenbank, die Verbindung Management und viele andere Dinge sehr gut behandelt, und spart Ihnen den Aufwand. Ich schrieb vor einem Jahr a blog post on building a database-backed website with Flask and SQLAlchemy, und ich empfehle Ihnen wirklich, einen Blick darauf zu werfen.

+0

Dank @Giles. Ich habe Ihr Tutorial durchgelesen und versucht, SQLalchemy zu verwenden. Ich denke, ich bin fast da, stehe aber hier fest: 'http: // stackoverflow.com/questions/42579079/flask-post-data-to-table-using-sqlalchemy-mysql' – wazzahenry

Verwandte Themen