即使len(cursor.fetchall())
大于0,为什么此代码仍将用户添加到sqlite3 db?
#just for refrence, the issue is in the next block of code
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.route("/add_user", methods=['POST'])
def add_user():
data = request.get_json(force=True)
cursor = get_db().cursor()
response = cursor.execute("SELECT * FROM users WHERE email = ?", (data['email'],))
print('res_length', len(response.fetchall()))
res_length = len(response.fetchall())
if res_length > 0:
return jsonify({"message": "User exists"})
else: #This always executes!!! Why?????
cursor.execute("INSERT INTO users (name, email, password) VALUES(?, ?, ?)", (data['name'], data['email'], data['password']))
get_db().commit()
get_db().close()
return jsonify({
"message": "New User added",
"status": "ok",
"status_code": 200
})
使用Flask-1.0.3和Python-3.7.3
答案 0 :(得分:0)
显然,您只能在光标响应上调用.fetchall()
。进一步尝试在同一光标响应上调用.fetchall()
将返回一个空列表。
删除打印语句:print('res_length', len(response.fetchall()))
允许我使用res_length = len(response.fetchall())
并解决了问题。