Python Flask: получение идентификатора из базы данных (преобразование кортежа в int) - PullRequest
0 голосов
/ 03 апреля 2020

Я написал приложение Flask, которое может обращаться к базе данных mysql, работающей в Dockerfile, со следующей схемой:

CREATE TABLE tasksdb (
    id INTEGER AUTO_INCREMENT PRIMARY KEY, 
    task VARCHAR(20),
    is_completed BOOLEAN,
    notify VARCHAR(100)
);

Мне нужно вернуть идентификатор задачи, которая была создана в последний раз. Таким образом, я хотел бы получить идентификатор из базы данных. Я пробовал несколько вариантов, но ни один из них не работал:

cursor.execute('SELECT id FROM tasksdb WHERE task="%s"', [task])
print(cursor.fetchall())

Вывод: ()

cursor.execute("SELECT COUNT(*) FROM tasksdb")

Вывод: ((1,),), ((2,),) et c каждый раз запустить команду.

Тем не менее, я запутался, поскольку база данных показывает это при запуске следующего в оболочке Docker bash:

SELECT * from tasksdb;
Empty set (0.00 sec)

Тем не менее, я пытаюсь получить 1,2 et c из вывода, чтобы моя функция могла вернуть это:

Проблема в том, что string_id=str(cursor.fetchall()) приводит к выводу (). Таким образом, я понятия не имею, как получить доступ к средней части.

res = int(''.join(map(str, cursor.fetchall()))) ведет к ValueError: invalid literal for int() with base 10: ''

res=cursor.fetchall()[0] ведет к: IndexError: tuple index out of range

Не могли бы вы помочь мне, как я мог получить идентификатор?

Кроме того, мне интересно, почему идентификатор всегда начинается снова с 1 при перезапуске приложения flask и запуске теста, но не при перезапуске контейнера mysql. Я ожидаю, что контейнер и база данных будут создавать задачи с новым идентификатором даже после перезапуска.

Вот мой полный код:

from flask import Flask, request, Response
import json
import MySQLdb
import json
app = Flask(__name__)

cursor = None

def get_db_connection():
    global cursor
    if not cursor:
        db = MySQLdb.connect("127.0.0.1", "root", "DockerPasswort!", "demo", port=3306)
        cursor = db.cursor()
    return cursor

# Create a new task
@app.route('/v1/tasks', methods=['POST'])
def post():
    cursor = get_db_connection()
    data = request.get_json()
    if "title" not in data:
        return bulkadd(data)
    is_completed=False
    if "is_completed" in data:
        is_completed=data["is_completed"]
    notify=""
    if "notify" in data:
        notify=data["notify"]
    task = data["title"]
    sql='INSERT INTO tasksdb (task, is_completed, notify) VALUES (%s, %s, %s)'
    cursor.execute(sql, [task, is_completed, notify])
    #Insert any of the attempts to obtain the id here and return it.
    return "True"

Спасибо за вашу помощь!

------------------------------------- EDIT ---------- ------------- Я просто добавил задачу прямо в mysql и выполнил это:

SELECT * from tasksdb;
+----+---------------+--------------+-----------------------------+  
| id | task          | is_completed | notify                      |  
+----+---------------+--------------+-----------------------------+  
| 22 | My First Task |            0 | test@berkeley.edu |  
+----+---------------+--------------+-----------------------------+  
1 row in set

Тот факт, что id равен 22, убеждает меня в том, что ранее запросы были сохранены , Однако я не понимаю, почему возвращается только эта строка? Не следует ли сохранить все прежние запросы?

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