【发布时间】: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