2017-03-02 4 views
0

Il s'agit d'une tentative débutante d'insertion de données dans une table mysql à l'aide de flask. Je peux entrer des données dans le formulaire, mais cela n'introduit pas les données. J'utilise pythonanywhere, de sorte que le message d'erreur est pas clair ...Flacon Python insertion de données à partir du formulaire

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

Répondre

1

Vous avez une erreur dans la requête SQL

Votre code:

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

correcte Insérer

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

Un autre exemple de w3schools

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

développeur PythonAnywhere ici - vous devriez obtenir les mêmes messages d'erreur sur notre système sur tout autre - avez-vous vérifié le journal des erreurs de votre application Web?

Il y a quelques problèmes avec votre code. Comme Stanislav Filin dit, la chaîne vide dans le SQL que vous passez à c.execute ne devrait pas être là; vous spécifiez quatre colonnes, vous n'avez donc besoin que de quatre valeurs.

Mais vous devez également transmettre certaines valeurs à insérer. La chaîne SQL est juste une commande à envoyer à la base de données, et vous devez indiquer au système les valeurs à remplacer par les %s lorsque cela se produit.

Ainsi, au lieu de

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

... vous devriez avoir

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

Voir this help page pour plus d'exemples. Une dernière chose - utiliser la bibliothèque MySQL directement dans une application Flask va être très difficile. Il y a beaucoup de complexités à l'utiliser, en particulier autour de la gestion des connexions. Le code que vous donnez ci-dessus fonctionnera pour un seul utilisateur de votre site, et seulement tant qu'il n'est pas inactif pendant plus longtemps que le délai de connexion de la base de données (cinq minutes sur PythonAnywhere), mais il cassera avec des messages d'erreur confus. SQLAlchemy est un excellent outil que vous pouvez mettre entre votre code Flask et la base de données qui gère la gestion des connexions et beaucoup d'autres choses très bien, et vous permet d'économiser l'effort. J'ai écrit a blog post on building a database-backed website with Flask and SQLAlchemy il y a environ un an, et je vous recommande vraiment de jeter un oeil.

+0

Merci @Giles. J'ai suivi votre didacticiel et essayé d'utiliser SQLalchemy. Je suis presque là mais je suis coincé ici: 'http: // stackoverflow.com/questions/42579079/flask-post-data-to-table-using-sqlalchemy-mysql' – wazzahenry