我想我已经疯了,所以请你的帮助将会受到赞赏......
我正在尝试使用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”附近使用正确的语法
我该如何使这项工作?
谢谢!
答案 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, )