python и mysqldb: синтаксическая ошибка в совершенно хорошем запросе? - PullRequest
0 голосов
/ 22 февраля 2012

Мой код:

selectQ ="""SELECT * FROM  %s WHERE %s = %%s order by RAND() limit %s""" % (self.table,self.columnSpecName,limit),
self.db.execute(str(selectQ),(idKey))

Я получаю это исключение: 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 ''SELECT * FROM table WHERE person_oid = 16 order by RAND() limit 10',)' at line 1")

Однако, если я копирую запрос и запускаю его через mysql, он работает нормально.

Что я пропускаю?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Вы должны посмотреть ближе к:

синтаксису, чтобы использовать рядом с '' SELECT * FROM table, ГДЕ person_oid = 16 упорядочить по RAND () limit 10 ',)' в строке 1 ")

И вы увидите двойной апостроф в начале запроса и ,)' в конце.

selectQ ="""SELECT * FROM  %s WHERE %s = %%s order by RAND() limit %s""" % (self.table,self.columnSpecName,limit),
self.db.execute(str(selectQ),(idKey))

У вас есть запятая в конце первогострока, превращающая его в кортеж

Удалите его, и вам не понадобится str(selectQ) во второй строке.

2 голосов
/ 22 февраля 2012

В первой строке (в конце) у вас запятая на много:

selectQ ="""SELECT * FROM  %s WHERE %s = %%s order by RAND() limit %s""" % (self.table,self.columnSpecName,limit),
self.db.execute(str(selectQ),(idKey))

Измените ее на:

selectQ ="""SELECT * FROM  %s WHERE %s = %%s order by RAND() limit %s""" % (self.table,self.columnSpecName,limit)
self.db.execute(str(selectQ),(idKey))
...