Python和mySQL,INSERT有效,但SELECT返回-1 ......!

时间:2015-05-18 11:58:05

标签: python mysql sql

我想我已经疯了,所以请你的帮助将会受到赞赏......

我正在尝试使用AWS的RDS,并且我已经设置了一个简单的MySQL数据库。

一个表:MyTable:id(int,auto increment),col1(varchar(64)),col2(int)。

我尝试以下代码,但未能使事情正常运行:

myString = base64.standard_b64encode("myTestString")
myInt = 0

config = {
'user': db_username,
'password': db_password,
'host': db_host,
'database': db_database,
'raise_on_warnings': True,
'charset' :'utf8',
}

cnx = mysql.connector.connect(**config)

cursor1 = cnx.cursor()
SQLa = ("INSERT INTO myTable (col1, col2) VALUES (%s, %s)")
SQLav = (myString, myInt)
cursor1.execute(SQLa, SQLav)
cnx.commit()            

cursor2 = cnx.cursor()
SQLq = ("SELECT id, col1, col2 FROM myTable WHERE col1 = '%s'")
SQLv = (myString)
cursor2.execute(SQLq, SQLv)

print cursor2.rowcount

rows = cursor2.fetchall()
for row in rows:
    print(row)

cursor1.close()
cursor2.close()
cnx.close()

INSERT工作,在MySQL Workbench中我看到添加的行。

SELECT虽然总是返回-1!

我在SELECT中尝试没有'',但是我收到错误:

  

mysql.connector.errors.ProgrammingError:1064(42000):你有一个   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在第1行的“%s”附近使用正确的语法

我该如何使这项工作?

谢谢!

1 个答案:

答案 0 :(得分:2)

您的查询占用%s并将其包装在''中,这意味着mysql连接器将其视为字符串文字,而不是作为占位符替换为您的值。 删除''''约%s,它应该工作正常。

SQLq = ("SELECT id, col1, col2 FROM myTable WHERE col1 = '%s'")

变为

SQLq = ("SELECT id, col1, col2 FROM myTable WHERE col1 = %s")

此外,SQLv =(mystring)不会成为元组,它仍然是一个字符串 要使SQLv成为元组,您必须添加一个逗号(不是非常直观)

SQLv = (mystring, )