在Flask中使用MySQL

jay*_*yde 22 python mysql web-services flask

有人可以在Flask中共享有关如何访问MySQL数据库的示例代码吗?有文档显示如何连接到sqlite而不是MySQL.

非常感谢你提前

Spa*_*xxf 31

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@server/db'
db = SQLAlchemy(app)


class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username
Run Code Online (Sandbox Code Playgroud)

您可以谷歌"Flask-Sqlalchemy"获取更多信息.

  • 是的,但这与sqlalchemy有关.怎么样只是直接的mysql? (7认同)

ora*_*nge 29

首先,您需要安装Flask-MySQL软件包.使用pip例如:

pip install flask-mysql

接下来,您需要添加一些配置并初始化MySQL:

from flask import Flask
from flaskext.mysql import MySQL

app = Flask(__name__)
mysql = MySQL()
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = 'root'
app.config['MYSQL_DATABASE_DB'] = 'EmpData'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
Run Code Online (Sandbox Code Playgroud)

现在您可以获取连接和游标对象并执行原始查询:

conn = mysql.connect()
cursor =conn.cursor()

cursor.execute("SELECT * from User")
data = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)

  • 如何检查连接错误? (2认同)
  • 自 Flask 2.3.0 以来,flask-mysql 不再工作,因为 `_request_ctx_stack` 用法已被[删除](https://flask.palletsprojects.com/en/3.0.x/changes/#version-2 -3-0)。 (2认同)

Los*_*ost 10

用pymysql很简单:

from flask import Flask, request, render_template
import pymysql

db = pymysql.connect("localhost", "username", "password", "database")

app = Flask(__name__)
api = Api(app)

@app.route('/')
def someName():
    cursor = db.cursor()
    sql = "SELECT * FROM table"
    cursor.execute(sql)
    results = cursor.fetchall()
    return render_template('index.html', results=results)

if __name__ == '__main__':
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)

在index.html文件中,只需执行以下操作:

<div>
<% for row in results %}
      <tr>
         <td>{{ row[0] }}</td>
         <td>{{ row[1] }}</td>
         <td>{{ row[2] }}</td>
         <td>{{ row[3] }}</td>
      </tr>
{% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)