Проблема вставки нескольких полей в Flask, Postman и Mysql - PullRequest
0 голосов
/ 24 мая 2018

Мы пытаемся создать прототип для приложения, использующего Flask-Postman-Mysql.

В настоящее время мы вставляем некоторые данные в Postman, которые должны быть доступны из внешнего интерфейса с помощью Flask и сохранены вMysql стол.Здесь мы можем вставить одно поле, но не несколько полей.Вот данные почтальона: Data_Insertion_Postman

Вот код в Flask для вставки одной записи:

from flask import Flask, request, jsonify, make_response
from flask_sqlalchemy import SQLAlchemy
import jwt
import datetime
from functools import wraps
import mysql.connector

app = Flask(__name__)

app.config['SECRET_KEY'] = 'thisissecret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234@localhost/flask2018'
db = SQLAlchemy(app)

class Users(db.Model):
    name = db.Column(db.Integer, primary_key=True)
    password = db.Column(db.String(80))
@app.route('/users', methods=['POST'])

def create_user():

    data = request.get_json()

    create_user= Users( name=data['name'], password=data['password'])

    db.session.add(create_user)
    db.session.commit()

    return jsonify({'message' : 'New user created!'})

if _name_ == '__main__':
    app.run(debug=True,port=4022)

Вот код в Flask для нескольких записей: (выдает ошибку)

from flask import Flask, jsonify,request
from flaskext.mysql import MySQL

app = Flask(__name__)
mysql = MySQL(app)

# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'root'
app.config['MYSQL_DATABASE_PASSWORD'] = '1234'
app.config['MYSQL_DATABASE_DB'] = 'flask2018'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'

mysql.init_app(app)

@app.route('/users', methods=['POST'])
def get():
    cur = mysql.connect().cursor()
    json_dict = request.get_json()

    name = str(json_dict["name"])
    password = str(json_dict["password"])
    #with cur.cursor() as cursor:
    values = 'INSERT INTO users(name,password) VALUES(%s,%s)'
    cur.execute(values, (name,password))
    mysql.connect().commit()

    #cur.close()

    return jsonify()

if _name_ == '__main__':
    app.run(debug=True,port=4022)

Когда мы запускаем указанную выше программу несколько раз, она отображает такие ошибки, как 1. "Key Name" = 'name' 2. Дублирующая запись 3. 401 Несанкционированный и т. д.

Есть предложения по улучшению?

1 Ответ

0 голосов
/ 24 мая 2018

Я вижу пару проблем с вашей реализацией.В теле вашего запроса есть поле users, а names находится в массиве users.Вот почему вы получаете ключевую ошибку, потому что пытаетесь получить доступ к name, даже если он находится в поле users scope.Другая проблема связана с определением поля имени в схеме базы данных.Вы определили его как целое число, но передаете строковое значение.

Чтобы получить имена и пароли, вы можете сделать

json_dict = request.get_json()
for user in json_dict["users"]:
    name = str(json_dict["name"])
    password = str(json_dict["password"])

Я полагаю, вы получаете поля Duplicate Entryпотому что вы пытались опубликовать одни и те же данные более одного раза.Поскольку ваш первичный ключ - name (который я не рекомендую), вы должны убедиться, что name не продублирован, потому что вы не можете вставить несколько первичных ключей с одинаковым значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...