在我的燒瓶應用程式中,我無法插入user_id從中獲取的內容,request.form
并且它是 MySQL 的整數。這是我的代碼:
from flask import Flask, jsonify, render_template
from flask import request
import socket
from flask_mysqldb import MySQL
app = Flask(__name__)
app.config['MYSQL_HOST'] = '192.168.0.101'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PORT'] = '3307'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'msblog_users'
mysql = MySQL(app)
@app.route("/create_post", methods = ['POST', 'GET'])
def create_post():
if request.method == 'GET':
return "You can only send post requests here!"
if request.method == 'POST':
user_id = request.form.get('user_id')
message = request.form.get('message')
cursor = mysql.connection.cursor()
cursor.execute('''INSERT INTO posts (user_id, post)VALUES (%s, %s)''', (int(user_id), message))
mysql.connection.commit()
cursor.close()
return "Done"
我收到以下錯誤:
TypeError: 'str' object cannot be interpreted as an integer
我應該怎么辦?我做了很多搜索,但到目前為止一無所獲!
uj5u.com熱心網友回復:
錯誤來自int(user_id)零件,特別是由于值為None。您應該首先確保它是一個有效的整數:
try:
user_id = int(request.form.get('user_id'))
except (ValueError, TypeError):
return <error 400>
uj5u.com熱心網友回復:
%s代表字串,如果您希望該引數為整數,請將其設為%i。
INSERT INTO posts (user_id, post)VALUES (%i, %s) ....
如果該列post是字串/文本列(可能是 varchar),您也應該這樣參考它。
cursor.execute("INSERT INTO posts (user_id, post) VALUES (%i , '%s')" % (1, 'string value')
順便說一句,這是格式化字串的舊方法
新方法是這樣做的:
cursor.execute("INSERT INTO posts (user_id, post) VALUES ({}, '{}')".format(1, 'string value')
或者您可以命名引數:
"INSERT INTO posts (user_id, post) VALUES ({id}, '{str}')".format( str='string value',id=1)
uj5u.com熱心網友回復:
最后,我發現了問題。太奇怪了!!該問題甚至與插入查詢無關。看一下我的flask代碼中的MySQL連接配置部分,如下所示:
app.config['MYSQL_HOST'] = '192.168.0.101'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PORT'] = '3307'
app.config['MYSQL_PASSWORD'] = 'password'
app.config['MYSQL_DB'] = 'msblog_users'
埠寫在引號之間!這是一個字串,但 MySQL 需要一個整數值才能使埠能夠連接!
這是快速修復:
app.config['MYSQL_PORT'] = 3307
我花了一天時間解決它!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/504986.html
