繁体   English   中英

无法在 python 中插入 integer 到 MySQL

[英]Cannot insert integer to MySQL in python

在我的 flask 应用程序中,我无法插入从request.form获得的user_id ,它是 integer 到 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

我应该怎么办? 我做了很多搜索,但到目前为止一无所获!

错误来自int(user_id)部分,特别是由于值为None 您应该首先确保它是有效的 integer:

try:
    user_id = int(request.form.get('user_id'))
except (ValueError, TypeError):
    return <error 400>

最后,我发现了问题。 太奇怪了,这个问题甚至与插入查询无关:看一下我的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 需要一个 integer 值才能使端口能够连接!

这是快速修复:

app.config['MYSQL_PORT'] = 3307

我花了一天时间解决它!

%s代表字符串,如果您希望该参数为 integer,请将其设为%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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM