Проблема вставки нескольких полей в Flask, Postman и Mysql

0

Мы пытаемся создать прототип приложения с использованием Flask-Postman-Mysql.

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

Вот код в 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. Duplicate Entry 3. 401 Unauthorized и т.д.

Любые предложения по улучшению?

  • 0
    Вы назначили name как поле первичного ключа. name = db.Column(db.Integer, primary_key=True) . Есть ли причина этого.
  • 0
    Нет особой причины. Мы просто хотели взять одно поле в качестве первичного ключа для передачи данных.
Показать ещё 1 комментарий
Теги:
flask

1 ответ

3

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

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

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 не дублируется, потому что вы не можете вставить несколько первичных ключей, имеющих одинаковое значение.

  • 0
    Я реализовал ваши предложения. Поле Id теперь является первичным ключом, но при выполнении оно выдает ошибку: Ошибка ключа: «id». (наше основное внимание на второй программе ...)
  • 0
    @RRSS вы можете дать нам более подробную информацию? Как вы вставляете идентификатор в БД? Какой тип данных вы используете для этого?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню