这是初学者尝试使用flask将数据插入mysql表。我可以在表单中输入数据,但它不会插入数据。我正在使用pythonanywhere,所以错误信息不清楚......
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 | |
+----------------+-------------+------+-----+---------+----------------+
代码:
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')
答案 0 :(得分:3)
PythonAnywhere开发人员 - 您应该在我们的系统上获得与其他任何错误消息相同的错误消息 - 您是否检查了Web应用程序的错误日志?
您的代码存在一些问题。就像Stanislav Filin所说的那样,你传递给c.execute
的SQL中的空字符串不应该存在;您指定了四列,因此您只需要四个值。
但是你还需要传入一些值来插入。 SQL字符串只是一个发送到数据库的命令,您需要告诉系统将%s
替换为c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES ('',%s,%s,%s,%s)")
时的值。
所以而不是
c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES (%s,%s,%s,%s)", (Item, Shack, Paym_Reference, Amount))
......你应该
kinematic-body
有关更多示例,请参阅this help page。
最后一件事 - 直接在Flask应用程序中使用MySQL库将会非常困难。使用它涉及许多复杂性,特别是在连接管理方面。您上面提供的代码将适用于您站点的单个用户,并且只有在它闲置的时间超过数据库的连接超时(PythonAnywhere上的五分钟)时才会有效,但是它会中断有令人困惑的错误消息。
SQLAlchemy是一个出色的工具,您可以在Flask代码和处理连接管理以及许多其他事情的数据库之间放置,并节省您的工作量。我大约一年前写过a blog post on building a database-backed website with Flask and SQLAlchemy,我真的建议你看看。
答案 1 :(得分:1)
你在SQL查询中有错误
您的代码:
c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES ('',%s,%s,%s,%s)")
正确插入
c.execute("INSERT INTO transactions(Item, Shack, Paym_Reference, Amount) VALUES (%s,%s,%s,%s)")
的另一个例子
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');