无法通过Python和pymysq插入MySQL

2024-06-06 07:06:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有9列的表,前3列都是文本,后6列设置为INT

当我在文本字段中插入时,一切都按预期工作

conn = pymysql.connect(host='', port=, user='', passwd='', db='')
cur = conn.cursor()
cur.execute("INSERT INTO table(Name) VALUES ('Sample Name')")

代码运行良好,允许我将名称插入数据库。然而,当我为整数运行insert语句时,我遇到了各种各样的麻烦。

我试过以下所有的方法:

cur.execute("INSERT INTO table(Left Avg) VALUES (5)")
cur.execute("INSERT INTO table(Left Avg) VALUES (%s)", (5))
cur.execute("INSERT INTO table(Left Avg) VALUES (%s)" % (5))
cur.execute("""INSERT INTO mlb_data(Left Avg) VALUES (%s)""" % (5))

本质上,无论我在将整数插入表中时尝试什么,都会得到以下错误。

Traceback (most recent call last):
File "testing.py", line 12, in <module>
cur.execute("""INSERT INTO mlb_data(Left Avg) VALUES (%s)""" % (5))
File "build/bdist.macosx-10.7-intel/egg/pymysql/cursors.py", line 117, in execute
File "build/bdist.macosx-10.7-intel/egg/pymysql/connections.py", line 189, in     defaulterrorhandler
pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; check the    manual that corresponds to your MySQL server version for the right syntax to use near 'Left   Avg) VALUES (5)' at line 1")

我试图将MySQl平板电脑改为VarChar而不是INT,但是无论何时我试图插入一个数字,都会得到一个错误。

我错过了什么?

编辑: 我不知道我以前是否试过,或者我的格式不正确,但我想出来了。

num = 5.23947824987
cur.execute("INSERT INTO mlb_data(LeftAvg) VALUES (%s)", (num,))

工作顺利。这是对的,还是我只是很幸运?


Tags: inpyexecutedatalinetableleftfile
3条回答

怎么样

cur.execute("INSERT INTO table(`Left Avg`) VALUES (?)", (5,))

假设列名是'Left Avg',作为一般规则,您可能应该尽量避免列名中的空格

在Python中插入的简单方法是使用连接字符串。像这样的:

id_user = 1
username = "Tudor"
address = "Cluj-Napoca"
sql = "INSERT INTO user(id_user,username,address) VALUES (" + id_user + ",'" + username + "','" + address + "');"
cursor.execute(sql)

但要注意“和”的符号。我强烈建议在执行查询之前打印。

在回答最后一个问题时:你很幸运,并且/或者你发现或记住了用python方法进行SQL查询。您可以在site-packages/pymysql/tests/test_basic.py中看到类似的示例,例如:

            v = (True, -3, 123456789012, 5.7, "hello'\" world", u"Espa\xc3\xb1ol
", "binary\x00data".encode(conn.charset), datetime.date(1988,2,2), datetime.date
time(2014, 5, 15, 7, 45, 57), datetime.timedelta(5,6), datetime.time(16,32), tim
e.localtime())
            c.execute("insert into test_datatypes (b,i,l,f,s,u,bb,d,dt,td,t,st) 
values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", v)

相关问题 更多 >