我有一个从
创建的数据库CREATE TABLE `ip` (
`idip` int(11) NOT NULL AUTO_INCREMENT,
`ip` decimal(45,0) DEFAULT NULL,
`mask` int(11) DEFAULT NULL,
PRIMARY KEY (`idip`),
UNIQUE KEY `ip_UNIQUE` (`ip`)
)
我已经在这个表中插入了一些
但是当我尝试在python上执行时:
sql = "select idip from ip where ip=%s and mask=%s" % (long(next_hop), 'DEFAULT')
cursor.execute(sql)
idnext_hop = cursor.fetchone()[0]
我收到以下错误:
Inserting routes into table routes (1/377)...('insere_tabela_routes: Error on insertion at table routes, - SQL: ', 'select idip from ip where ip=0 and mask=DEFAULT')
1064 (42000): 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 '' at line 1
有没有人知道问题是什么?
答案 0 :(得分:1)
您正在使用参数重新设置查询字符串,而不是将它们作为参数传递。代码应如下所示:
sql = "select idip from ip where ip = ? and mask = ?"
cursor.execute(sql, (long(next_hop), 'DEFAULT'))
idnext_hop = cursor.fetchone()[0]
换句话说,您希望查询引擎对查询进行替换。您不希望Python对查询字符串进行替换。
答案 1 :(得分:1)
mysql.connector
uses %s
instead of ?
as the parameter marker,但是你通过使用Python字符串格式来规避它。试试这个:
sql = "select idip from ip where ip=%s and mask=%s"
cursor.execute(sql, (long(next_hop), 'DEFAULT'))
idnext_hop = cursor.fetchone()[0]