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 值时才应使用它。
另外,没有VARCHAR
data type in SQLite。使用 TEXT
.
我使用 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 值时才应使用它。
另外,没有VARCHAR
data type in SQLite。使用 TEXT
.