使用SQLAlchemy / Mysql将数据发布到表中 [英] Flask post data to table using SQLAlchemy/Mysql

查看:508
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆