【问题标题】:ID got null in json (id=null) RESTapi Python flask sqlite. What to do if id is equal to nullID 在 json (if=null) REST api Python flask sqlite 中为空。如果 id 等于 null 怎么办
【发布时间】:2021-12-30 13:05:17
【问题描述】:

使用烧瓶框架,我在 SQLite 中创建了具有 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)

【问题讨论】:

  • PRIMERY KEY 应该是PRIMARY KEY。
  • 仅供参考,select * 具有索引访问(row[0] 等)是一个糟糕的主意;在 select 语句中使用命名列引用或显式列列表
  • PRIMERY KEY 应该是 PRIMARY KEY。也许 sqlite 会默默地忽略它,如果它实际上不是 PK,则不会应用自动增量?
  • 我解决了PRIMARY KEY的更正。我删除数据库并再次创建它。但仍然id=null。我也分享了[链接](我的github.com/TejasMankarr/Books-Library)链接

标签: python sqlite flask primary-key create-table


【解决方案1】:

这是 SQLite 的正确语法:

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

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

【讨论】:

  • 是的,感谢您的更正。
  • @TejasMankar 这不是更正。这是一个解决方案。您是否将 int 更改为 INTEGER?
  • 是的@forpas 现在id 不是null
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-22
  • 2012-07-06
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多