使用python在MySQL中添加数据
我想在CentOS上使用Python2.7在MySQL数据库中添加数据 这是我的密码使用python在MySQL中添加数据,python,mysql,database,python-2.7,centos7,Python,Mysql,Database,Python 2.7,Centos7,我想在CentOS上使用Python2.7在MySQL数据库中添加数据 这是我的密码 # Sample data clusterList =['a', 'w', 'e', 'r'] versionList = [1,2,3,4] portalDomain = ['aa', 'bb', 'cc', 'dd'] portalDomains = ['p1', 'p2', 'p3', 'p4'] db = mysql.connect(host="mydb.com", user="nod", passw
# Sample data
clusterList =['a', 'w', 'e', 'r']
versionList = [1,2,3,4]
portalDomain = ['aa', 'bb', 'cc', 'dd']
portalDomains = ['p1', 'p2', 'p3', 'p4']
db = mysql.connect(host="mydb.com", user="nod", passwd="", db="noc")
cur = db.cursor()
for i in range(len(portalDomains)):
print("Adding data...")
query = "INSERT INTO test_score (portalCluster,portalVersion,portalDomain) values
('%s', %s, '%s')"
% (clusterList[i], versionList[i], portalDomains[i])
cur.execute(query)
db.commit()
我得到下面的错误
_mysql_exceptions.ProgrammingError: (1064, "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 'release-20180822-16, 'portal.xyv.com')' at line 1")
我可以使用
cur.execute ("INSERT INTO test_release_score
(portalCluster,portalVersion,portalDomain) values ('%s', %s, '%s')"
% ("1122q", 7, "2wq2w"))
但是,当我把它改成下面这样的东西时
# change 7 to 'qa22'
cur.execute ("INSERT INTO test_release_score
(portalCluster,portalVersion,portalDomain) values ('%s', %s, '%s')" %
("1122q", "qa12", "2wq2w"))
我得到一个错误:
_mysql_exceptions.OperationalError: (1054, "Unknown column 'qa12' in 'field list'")
任何帮助都将不胜感激。使用占位符和查询参数,而不是使用
%
运算符将值插入查询中:
query = ("INSERT INTO test_score (portalCluster,portalVersion,portalDomain) "
"VALUES (%s, %s, %s)")
cur.execute(query, (clusterList[i], versionList[i], portalDomains[i]))
这样,数据库驱动程序将为您执行必要的转义/引用,这也可以防止SQL注入漏洞。您能在问题中显示查询吗?值被替换后。@MohitMotwani,我不确定您的意思是什么,query是字符串,对吗?但是,然后用一些值替换“%s”。您能在替换后显示查询吗?只需给出
打印(查询)
的输出即可。因为您的错误显示语法错误。此外,还可以显示数据库表的模式以使其更清晰。这里是('QUERY==>',“INSERT-INTO-test\u-release\u score(portalCluster,portalVersion,portalDomain)值('ClA',Ve22-16,'pcom'))非常感谢Eugene,它成功了。您能告诉我我的方法有什么问题吗?在您最初的查询中,第二个值没有被引用:(“%s”、“s”、“s”)
;因此,当它是字符串时,它将被视为列名。