使用SQLAlchemy / Mysql将数据发布到表中 [英] Flask post data to table using SQLAlchemy/Mysql
问题描述
我试图从一个html表单写入数据到MySQL表,在Pythonanywhere上使用Flask / Python / SQLAlchemy。 Mysql表设置完成后,我可以在/ transactions上输入数据,但是然后崩溃了...
的MySQL>描述交易1;
+ ---------------- + --------------- + ------ + ----- + --------- + ---------------- +
|字段|类型|空|密钥|默认|额外|
+ ---------------- + --------------- + ------ + ----- + --------- + ---------------- +
| trans_id | int(11)| NO | PRI | NULL | auto_increment |
| Item | varchar(4096)|是| | NULL | |
|小屋| varchar(4096)|是| | NULL | |
| Paym_Reference | varchar(20)|是| | NULL | |
|金额| varchar(10)|是| | NULL | |
+ ---------------- + --------------- + ------ + ----- + --------- + ---------------- +
HTML:'Transactions.html':
{%extendstemplate3.html%}
{%block content%}
< h1>输入交易< / h1>
< form action =,method =POST>
< dl>
< dt>出售物品:
< dd><输入类型=文字名称=物品必需/>
< dt> Shack:
< dd>< input type = text name =Shackrequired />
< dt>参考:
< dd>< input type = text name =Paym_Referencerequired />
< dt>金额:
< dd><输入类型=文字名称=金额required />
< / dl)
< br>
< p><输入类型=提交值=进入>
< / form>
{%endblock%}
代码:
pre $
from flask导入Flask,render_template,request,redirect,url_for,session,
从functools导入sys
import
from flask.ext.sqlalchemy import SQLAlchemy
SQLALCHEMY_DATABASE_URI =mysql + mysqlconnector:// {username}:{password} @ {hostname} / {databasename}.format(
username =username,
password =password,
hostname =hostname,
databasename =databsename,
)
app.config [ SQLALCHEMY_DATABASE_URI] = SQLALCHEMY_DATABASE_URI
app.config [SQLALCHEMY_POOL_RECYCLE] = 299
db = SQLAlchemy(app)
类Transaction1(db.Model):
__tablename__ =transactions1
trans_id = db.Column(db.Integer,primary_key = True)
Item = db.Column(db.String(4096))
Shack = db .Column(db.String(4096))
Paym_Reference = db.Column(db.VARCHAR(20))
Amount = db.Column(db.VA RCHAR(10))
@ app.route('/ transactions',methods = ['GET','POST'])
def transactions( ):
if request.method =='GET':
return render_template('Transactions.html')
sale = transactions1(content = request.form [Item])
sale1 = transactions1(content = request.form [Shack])
sale2 = transactions1(content = request.form [Paym_Reference])
sale3 = transactions1(content = request.form [ Amount])
db.session.add(sale)
db.session.add(sale1)
db.session.add(sale2)
db.session.add (sale3)
db.session.commit()
return render_template('Transactions.html')
完整的错误:
2017-03-03 12:26:03,396:运行WSGI应用程序$ b时出错$ b 2017-03-03 12:26:03,398:NameError:全局名称'transactions1'未定义
2017-03-03 12:26:03,398:文件/usr/local/lib/python2.7 /dist-packages/flask/app.py line 2000,in __call__
2017-03-03 12:26:03,399:return self.wsgi_app(environ,start_response)
2017-03-03 12:26:03,399:
2017- 03-03 12:26:03,399:文件/usr/local/lib/python2.7/dist-packages/flask/app.py,行1991,在wsgi_app
2017-03-03 12:26 :03,399:response = self.make_response(self.handle_exception(e))
2017-03-03 12:26:03,399:
2017-03-03 12:26:03,399:File/ usr /local/lib/python2.7/dist-packages/flask/app.py,第1567行,在handle_exception
2017-03-03 12:26:03,399:reraise(exc_type,exc_value,tb)
2017-03-03 12:26:03,399:
2017-03-03 12:26:03,399:文件/usr/local/lib/python2.7/dist-packages/flask/app.py ,line 1988,in wsgi_app
2017-03-03 12:26:03,399:response = self.full_dispatch_request()
2017-03-03 12:26:03,399:
2017- 03-03 12:26:03,400:文件/usr/local/lib/python2.7/dist-packages/flask/app.py,第1641行,在full_dispatch_request
2017-03-03 12:26 :03,400:rv = self.handle_user_excep (e)
2017-03-03 12:26:03,400:
2017-03-03 12:26:03,400:文件/usr/local/lib/python2.7/dist-packages /flask/app.py,第1544行,在handle_user_exception
2017-03-03 12:26:03,400:reraise(exc_type,exc_value,tb)
2017-03-03 12:26:03,400 :
2017-03-03 12:26:03,400:文件/usr/local/lib/python2.7/dist-packages/flask/app.py,第1639行,在full_dispatch_request
2017 -03-03 12:26:03,400:rv = self.dispatch_request()
2017-03-03 12:26:03,400:
2017-03-03 12:26:03,400:File/ usr / local / lib / python2.7 / dist-packages / flask / app.py,第1625行,在dispatch_request
2017-03-03 12:26:03,400:return self.view_functions [rule.endpoint] (** req.view_args)
2017-03-03 12:26:03,400:
2017-03-03 12:26:03,401:文件/home/SIIL/mysite/flask_app.py第64行,在交易
2017-03-03 12:26:03,401:sale = transactions1(content = request.form [Item])
您可以调用Mode l由 tablename 。
你的代码应该像这样..而不是 transactions1
/ p>
$ p $ @ app.route('/ transactions',methods = ['GET','POST'])
def ():
if request.method =='GET':
return render_template('Transactions.html')
sale = Transactions1(Item = request.form [Item], Shack = request.form [Shack],Paym_Reference = request.form [Paym_Reference],Amount = request.form [Amount])
db.session.add(sale)
db .session.commit()
return render_template('Transactions.html')
I am trying to write data to a MySQL table from a html form, using Flask/Python/SQLAlchemy on Pythonanywhere. Mysql table is setup, I can enter data on the /transactions, but then it crashes...
Mysql:
mysql> DESCRIBE transactions1;
+----------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+---------+----------------+
| trans_id | int(11) | NO | PRI | NULL | auto_increment |
| Item | varchar(4096) | YES | | NULL | |
| Shack | varchar(4096) | YES | | NULL | |
| Paym_Reference | varchar(20) | YES | | NULL | |
| Amount | varchar(10) | YES | | NULL | |
+----------------+---------------+------+-----+---------+----------------+
HTML: 'Transactions.html':
{% extends "template3.html" %}
{% block content %}
<h1>Enter a Transaction</h1>
<form action="", 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>
{% endblock %}
Code:
from flask import Flask, render_template, request, redirect, url_for, session, flash
import sys
from functools import wraps
from flask.ext.sqlalchemy import SQLAlchemy
SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://{username}:{password}@{hostname}/{databasename}".format(
username="username",
password="password",
hostname="hostname",
databasename="databsename",
)
app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI
app.config["SQLALCHEMY_POOL_RECYCLE"] = 299
db = SQLAlchemy(app)
class Transactions1(db.Model):
__tablename__ = "transactions1"
trans_id = db.Column(db.Integer, primary_key=True)
Item = db.Column(db.String(4096))
Shack = db.Column(db.String(4096))
Paym_Reference = db.Column(db.VARCHAR(20))
Amount = db.Column(db.VARCHAR(10))
@app.route('/transactions', methods=['GET', 'POST'])
def transactions():
if request.method == 'GET':
return render_template('Transactions.html')
sale = transactions1(content=request.form["Item"])
sale1 = transactions1(content=request.form["Shack"])
sale2 = transactions1(content=request.form["Paym_Reference"])
sale3 = transactions1(content=request.form["Amount"])
db.session.add(sale)
db.session.add(sale1)
db.session.add(sale2)
db.session.add(sale3)
db.session.commit()
return render_template('Transactions.html')
Full error:
2017-03-03 12:26:03,396 :Error running WSGI application
2017-03-03 12:26:03,398 :NameError: global name 'transactions1' is not defined
2017-03-03 12:26:03,398 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 2000, in __call__
2017-03-03 12:26:03,399 : return self.wsgi_app(environ, start_response)
2017-03-03 12:26:03,399 :
2017-03-03 12:26:03,399 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1991, in wsgi_app
2017-03-03 12:26:03,399 : response = self.make_response(self.handle_exception(e))
2017-03-03 12:26:03,399 :
2017-03-03 12:26:03,399 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1567, in handle_exception
2017-03-03 12:26:03,399 : reraise(exc_type, exc_value, tb)
2017-03-03 12:26:03,399 :
2017-03-03 12:26:03,399 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1988, in wsgi_app
2017-03-03 12:26:03,399 : response = self.full_dispatch_request()
2017-03-03 12:26:03,399 :
2017-03-03 12:26:03,400 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1641, in full_dispatch_request
2017-03-03 12:26:03,400 : rv = self.handle_user_exception(e)
2017-03-03 12:26:03,400 :
2017-03-03 12:26:03,400 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1544, in handle_user_exception
2017-03-03 12:26:03,400 : reraise(exc_type, exc_value, tb)
2017-03-03 12:26:03,400 :
2017-03-03 12:26:03,400 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1639, in full_dispatch_request
2017-03-03 12:26:03,400 : rv = self.dispatch_request()
2017-03-03 12:26:03,400 :
2017-03-03 12:26:03,400 : File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1625, in dispatch_request
2017-03-03 12:26:03,400 : return self.view_functions[rule.endpoint](**req.view_args)
2017-03-03 12:26:03,400 :
2017-03-03 12:26:03,401 : File "/home/SIIL/mysite/flask_app.py", line 64, in transactions
2017-03-03 12:26:03,401 : sale = transactions1(content=request.form["Item"])
You can call Model by tablename .
you code should like this .. instead of transactions1
@app.route('/transactions', methods=['GET', 'POST'])
def transactions():
if request.method == 'GET':
return render_template('Transactions.html')
sale = Transactions1(Item=request.form["Item"],Shack=request.form["Shack"],Paym_Reference=request.form["Paym_Reference"],Amount=request.form["Amount"])
db.session.add(sale)
db.session.commit()
return render_template('Transactions.html')
这篇关于使用SQLAlchemy / Mysql将数据发布到表中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!