Python MySQLdb与Flask Post一起使用时返回旧数据

Python MySQLdb与Flask Post一起使用时返回旧数据,python,mysql,python-2.7,mysql-python,Python,Mysql,Python 2.7,Mysql Python,我有一个带有MySQL后端的Flask网站。我有一个表名为,users。它有两列:用户名和名称以及一条记录: name username Jim testuser123 当用户单击网站上的按钮时,它会更新记录,将名称设置为Bob,然后打印所有记录,其中name='Bob'。然而,它没有返回任何结果。如果我在重新查询之前刷新连接,那么它会返回一个应该返回的结果。mdb.connect对象是否缓存数据?它怎么可能没有返回正确的结果呢 init.py: 1.html <html>

我有一个带有MySQL后端的Flask网站。我有一个表名为,users。它有两列:用户名和名称以及一条记录:

name  username
Jim   testuser123
当用户单击网站上的按钮时,它会更新记录,将名称设置为Bob,然后打印所有记录,其中name='Bob'。然而,它没有返回任何结果。如果我在重新查询之前刷新连接,那么它会返回一个应该返回的结果。mdb.connect对象是否缓存数据?它怎么可能没有返回正确的结果呢

init.py:

1.html

<html>

<body>

    <form method="POST">
          <button id="mybutton" name='btn' value="mybutton">Submit Data</button>
    </form>
</body>

为了让这段代码打印一个结果,我必须在调用update之后,但在print语句之前添加con=sql\u con。为什么会这样?

一般来说,使用ORM绑定是一种很好的做法,即Falsk SQLAlchemy与web框架一起管理连接池,自动提交/回滚。。。即使对于一个简单的应用程序来说,ORM似乎有些过分

否则,如果希望在低级别数据库连接中管理,请避免在同一请求中使用多个到同一数据库的连接

请尝试以下方法:

import pandas as pd
import MySQLdb as mdb
from flask import Flask, render_template, request

def sql_con():
    return mdb.connect(host='myhost', port=3306, user='root', passwd='root', db='db', use_unicode=True, charset="utf8")

app = Flask(__name__)


def update_record(con):
    cur = con.cursor()

    sql_string= "Update users set name = 'Bob' where username = 'testuser123'"

    cur.execute(sql_string)
    con.commit()


@app.route('/', methods=['GET', 'POST'])
def myroute():
    con = sql_con()

    if request.method == 'POST':
        update_record(con)
        print pd.read_sql("select * from users where name = 'Bob'", con=con)

    return render_template('1.html')

app.run( debug=True, port=5050)

如果您想基于这样的解决方案扩展一个真正的应用程序,您应该考虑从全局连接池中拉开一个打开的连接。在每个HTTP请求中创建一个新的db连接可能需要花费大量的时间。

可能与可能的重复有关。我刚才说的ORM绑定对象关系映射器代替了代码中的低级绑定。谷歌炼金术获得的例子。此类ORM负责将web事务与数据库事务同步、连接池管理、sql注入过滤、sql引用、对象数据库行自动转换等。。。
import pandas as pd
import MySQLdb as mdb
from flask import Flask, render_template, request

def sql_con():
    return mdb.connect(host='myhost', port=3306, user='root', passwd='root', db='db', use_unicode=True, charset="utf8")

app = Flask(__name__)


def update_record(con):
    cur = con.cursor()

    sql_string= "Update users set name = 'Bob' where username = 'testuser123'"

    cur.execute(sql_string)
    con.commit()


@app.route('/', methods=['GET', 'POST'])
def myroute():
    con = sql_con()

    if request.method == 'POST':
        update_record(con)
        print pd.read_sql("select * from users where name = 'Bob'", con=con)

    return render_template('1.html')

app.run( debug=True, port=5050)