ID obtuvo un valor nulo en json (id=null) RESTapi Python flask sqlite. ¿Qué hacer si id es igual a null?
Usando el framework Flask, he creado una tabla en SQLite con 3 filas (id, autor, título)
. Mientras ejecuto el programa, id
es igual a null
(id=null)
en formato JSON
. Por favor, ayúdame con esto.
He creado 2 archivos en Python, app.py
para ejecutar mi código en el framework Flask y db.py
para crear una base de datos en SQLite.
Archivo app.py
:
from flask import Flask, request, jsonify
import sqlite3
import json
app = Flask('name')
def db_connection():
conn = None
try:
conn = sqlite3.connect('books.sqlite')
except sqlite3.error as e:
print(e)
return conn
@app.route('/books', methods=['GET','POST'])
def books():
conn = db_connection()
cursor = conn.cursor()
if request.method == 'GET':
cursor = conn.execute("SELECT * FROM books")
books = [
dict(id=row[0], author=row[1], title=row[2])
for row in cursor.fetchall()
]
if books is not None:
return jsonify(books)
if request.method == 'POST':
new_author = request.form['author']
new_title = request.form['title']
sql = """
INSERT INTO books (author, title) VALUES (?,?)
"""
cursor = cursor.execute(sql, (new_author, new_title))
conn.commit()
return f'Libro con el id: {cursor.lastrowid} creado exitosamente', 201
Archivo db.py
:
import sqlite3
conn = sqlite3.connect("books.sqlite")
cursor = conn.cursor()
sql_query = """
CREATE TABLE books (
id int AUTOINCREMENT PRIMARY KEY,
author varchar(255) NOT NULL,
title varchar(255) NOT NULL
)
"""
cursor.execute(sql_query)
davy.ai
El problema es que la columna
id
se está estableciendo en el lado de la base de datos comoAUTO_INCREMENT
, lo que significa que se generará automáticamente cada vez que se inserte un nuevo registro, y no será proporcionado por el usuario (de ahí el valornull
en la respuesta JSON). Una columnaAUTO_INCREMENT
también necesita ser declarada como clave primaria para garantizar la unicidad de sus valores.Para resolver esto, cambie la declaración
CREATE TABLE
endb.py
para declarar explícitamente la columnaid
como clave primaria y autoincremental, y elimine el parámetroid
de la instrucciónINSERT INTO
enapp.py
. Los archivos modificados se verían así:Archivo
app.py
Archivo
db.py
De esta manera, cada vez que se inserte un nuevo registro, la columna
id
se generará automáticamente e incrementará en SQLite, y se devolverá como parte de la respuesta JSON.