python - 如何使用 flask 和 mysql 动态创建表列名和插入值

标签 python mysql flask

我想根据特定文本框中给定的值创建多个文本框,而另一个文本框将保存表名,现在我想从文本框中获取表名并获取在多个文本框作为列名,应该在 MySQL 中创建一个数据库。

这是我的代码

from flask import Flask
from flask import request
from flask import render_template
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'] = 'matrimony'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


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


@app.route('/searchQuery', methods=['POST'])
def search_query():
    if request.method: "POST"
    conn = mysql.connect()
    cursor = conn.cursor()
    name=request.form.get('name')
    sq_ = request.form.get('searchQuery')
    x=request.form.get('x')
    cursor.execute("""CREATE TABLE `%s`( NAME VARCHAR(50) DEFAULT NULL) """ % (name))
    print(sq_)

    return render_template('simplesearch.html', search_query=sq_)



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

index1.html

<form action="{{ url_for('search_query') }}" method="post">
    Name:<input type="text"  name="name">
    Column Number:<input type="text" name="searchQuery" id="searchQuery"><input type="submit" value="Submit">
</form>

简单搜索.html

<table>
    {% for x in range(search_query | int) %}
        <tr>
            <td>
                <input type="text"  name="i{{ x }}">
                <input type="hidden" value="{{ search_query }}">
            </td>
        </tr>
    {% endfor %}
<input type="submit" value="Submit">
</table>

它从文本框中获取表名并且只创建一列。 对此有任何帮助将不胜感激谢谢

最佳答案

我假设您需要创建带有用户定义字段的动态 MySQL 表。您无需两次提交表格。使用 jQuery 的一点帮助创建动态字段。然后处理 Controller 中的值。

您可以通过以下方式完成此操作。该程序需要 Flask-MySQL,可以使用 pip install Flask-MySQL 安装。

application.py:

from flask import Flask
from flask import request
from flask import render_template
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'] = 'matrimony'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)


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


@app.route('/create_table', methods=['POST'])
def create_table():
    if request.method=="POST":
        try:
            table_name = request.form.get('table_name')
            field_name_list = request.form.getlist('fields[]')
            field_list = []
            for field in field_name_list:
                field_list.append(field+ " VARCHAR(50) DEFAULT NULL")
            field_query = " ( " + ", ".join(field_list) + " ) "
            create_table_query = 'CREATE TABLE `'+table_name+'`' + field_query
            conn = mysql.connect()
            cursor = conn.cursor()
            cursor.execute(create_table_query)
            return "Table: "+table_name+" created successfully"
        except Exception as e:
            return str(e)

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

index1.html:

<form action="{{ url_for('create_table') }}" method="post">
    Name:<input type="text" name="table_name" id="table_name" />
    Column Number:<input type="text" name="number_of_columns" id="number_of_columns" />
    <input type="button" id="generate_field_btn" value="Generate Field" />
    <div id="dynamic_field">

    </div>
    <input type="submit" name="Create Table">
</form>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        $("#generate_field_btn").on("click",function(){
            $number_of_columns = $("#number_of_columns").val();
            $number_of_columns = parseInt($number_of_columns);
            for($i=0; $i<$number_of_columns; $i++){
                $field_name = "Field "+($i+1)+": ";
                $new_element = $field_name+'<input type="text" name="fields[]"/><br/>';
                $("#dynamic_field").append($new_element);   
            }

        })
    })
</script>

输出:

  1. 获取用户的输入字段:

Getting input fields from user

  1. 创建表后显示成功消息:

Showing success message after table creation

  1. 确保使用 phpMyAdmin 中的所需字段创建表:

Ensure the table is created with desired fields from phpMyAdmin

关于python - 如何使用 flask 和 mysql 动态创建表列名和插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46947826/

相关文章:

python - Numpy Sum 数组坐标有效地转换为数组

mysql - 错误: Method missing for Active record query : find_by_attribute_name ('test_data' ) not working

mysql - 如何将一亿行表导入数据库?

python - 回复 : How Can I Get Flask to Use GPIO Pins to Change the LED Brightness on Linux with a BeagleBone Black?

Python:将 snmp timeticks 转换为秒/天等

javascript - 正则表达式替换特殊字符在 JS 和 Python 中给出不同的结果

python - 合并两个具有相同索引的 Pandas 数据框

php - 接受/拒绝提交按钮与 php 循环

python - 属性错误 : 'NoneType' object has no attribute 'app' when trying to send mail in Flask

python - sqlalchemy.exc.InvalidRequestError : Multiple classes found for path in the registry of this declarative base