ID 在 json (id=null) RESTapi Python flask sqlite 中为空。如果 id 等于 null 怎么办

ID got null in json (id=null) RESTapi Python flask sqlite. What to do if id is equal to null

我使用 Flask 框架在 SQLite 中创建了 table 3 行 (id, author, title)。而我 运行 程序 id 等于 null (id=null) JSON 格式。请帮忙解决这个问题。 我在 python app.py 中创建了 2 个文件到 运行 我在 Flask 框架中的代码和 db.py 在 SQLite

中创建一个数据库 app.py flie

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'Book with the id: {cursor.lastrowid} created successfully',201

db.py flie

import sqlite3

conn = sqlite3.connect("books.sqlite")

cursor = conn.cursor()

sql_query = """ 
    CREATE TABLE books (
        id int AUTO_INCREMENT PRIMERY KEY,
        author varchar(255) NOT NULL,
        title varchar(255) NOt NULL
    )
    """

cursor.execute(sql_query)

这是 SQLite 的正确语法:

CREATE TABLE books (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    author TEXT NOT NULL,
    title TEXT NOT NULL
);

请注意,如果您希望列 id 自动递增,则应将列 id 定义为 INTEGER 而不是 int
关键字 AUTOINCREMENT(而非 AUTO_INCREMENT)是可选的,仅当您不希望在新行中重复使用已删除的 ID 值时才应使用它。
另外,没有VARCHARdata type in SQLite。使用 TEXT.