繁体   English   中英

将python连接到flask-mysqldb

[英]connect python to flask-mysqldb

安装数据库:

pip install flask-mysqldb

使用 xampp 设置配置在本地创建我的数据库

from flask import Flask, render_template, flash, redirect, url_for, request, 
logging
from wtforms import Form, StringField, TextAreaField, validators
from flask_mysqldb import MySQL

app = Flask (__name__)
# Config MySQL
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = ''
app.config['MYSQL_DB'] = 'todo'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

# init MYSQL
mysql = MySQL(app)
@app.route('/')
def index():
return render_template('index.html')


@app.route('/add')
def task():
return render_template('add.html')

# Task Form Class
class TaskForm(Form):
name = StringField('Name', [validators.Length(min=1, max=55)])
description = TextAreaField('Description', [validators.Length(min=5)])

# Add task
@app.route('/add', methods=['GET', 'POST'])
def add():
    form = TaskForm(request.form)
    if request.method == 'POST' and form.validate():
    name = form.name.data
    description = form.description.data

    # Create Cursor
    cur = mysql.connection.cursor()

    # Execute
    cur.execute("INSERT INTO todotask(name, description) VALUES(%s, %s)",
    (name, description))

    # Commit to DB
    mysql.connection.commit()

    #Close connection
    cur.close()

    flash('the task created ', 'success')

    return redirect(url_for('add'))

return render_template('index.html', form=form)
if __name__ == '__main__':
app.run(debug = True)

当我运行服务器时,它工作正常,并在向数据库插入任何内容时为 post 方法提供 200 状态,但是当我尝试检查任何插入或保存在数据库中的内容时,我该如何使其工作?

看起来你做的一切都是正确的,除了处理路线的奇怪方式。

前提是:

  1. 您正在使用默认参数在开发模式下运行 Flask,即开发服务器在localhost:5000上侦听,
  2. index.html包含指向http://localhost:5000/add
  3. 添加后您想重定向回http://localhost:5000

此代码应该工作:

from flask import Flask, render_template, flash, \
redirect, url_for, request, logging
from wtforms import Form, StringField, TextAreaField, validators
from flask_mysqldb import MySQL

app = Flask (__name__)
# Config MySQL
app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = ''
app.config['MYSQL_DB'] = 'todo'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

# TODO Update secret key
app.secret_key = 'UPDATETHISPART'

# init MYSQL
# mysql = MySQL(app)


# Task Form Class
class TaskForm(Form):
    name = StringField('Name', [validators.Length(min=1, max=55)])
    description = TextAreaField('Description', [validators.Length(min=5)])


@app.route('/')
def index():
    return render_template('index.html')


# Add task
@app.route('/add', methods=['GET', 'POST'])
def add():
    form = TaskForm(request.form)
    if request.method == 'POST' and form.validate():
        name = form.name.data
        description = form.description.data

        # Create Cursor
        cur = mysql.connection.cursor()

        # Execute
        cur.execute("INSERT INTO todotask(name, description) VALUES(%s, %s)", (name, description))

        # Commit to DB
        mysql.connection.commit()

        # Close connection
        cur.close()

        flash('the task created ', 'success')

        return redirect(url_for('index'))

    return render_template('add.html', form=form)


if __name__ == '__main__':
    app.run(debug=True)

我更新的内容:

  1. 删除了/add第一条路线,因为它似乎没有必要,
  2. 添加了密钥,
  3. 重新组织了如何添加/add路由处理重定向/渲染。

通过查看数据库插入处理,它看起来很好。 可能路线确实干扰了您的意图。

尝试这样做:

conn = mysql.connect()

cur = conn.cursor()

cur.execute("INSERT INTO todotask(name, description) VALUES(%s, %s)",
(name, description))

conn.commit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM