Как вставить список строк в предложение python MySQLDB VALUE - PullRequest
0 голосов
/ 03 апреля 2020

Это аналогично развертыванию списка для использования в предложении python MySQLDB IN и python в запросе sql в качестве параметра , но элементы их списка все целые.

param = []
param.append(post.title)
param.append(post.count_vote)
param.append(post.last_reply_time)
param.append(post.last_replyer_id)
param.append(post.poster_id)
param.append(post.content)
param.append(post.plain_content)
param.append(post.relate_unit)

query = "INSERT INTO post (title, countVote, lastReplyTime, lastReplyerId, posterId, content, plainContent, relateUnit) VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}');".format(*param)

cursor.execute(query)

Элементы имеют много типов, таких как int, str и None. Что меня удивляет, так это строковый тип, строка может содержать ' и ". Я просто заменил ' на " раньше. Однако я случайно увидел фрагмент кода C, например char ch = 'a';, в поле содержимого. ' замена не подчиняется синтаксису.

Я хочу знать, есть ли способ вставить строку без изменений? Я сталкиваюсь с идеей заменить ' на \', это хорошая идея?

Я также пытаюсь заменить {0} et c. в строке запроса с ?

query = "INSERT INTO post (title, countVote, lastReplyTime, lastReplyerId, posterId, content, plainContent, relateUnit) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"

cursor.execute(query, tuple(param))
# cursor.execute(query, [param,])

Оба дают мне ошибку

_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting

1 Ответ

0 голосов
/ 03 апреля 2020

На основе информации, которую вы используете MySQLdb .

  • Попробуйте использовать format для форматирования маркера параметра , т.е. %s, %d и т. Д., См. Ниже, я предположил, что все является строкой, которая, скорее всего, неверна.
  • Обязательно экранируйте %, см. Do c: Note that any literal percent signs in the query string passed to execute() must be escaped, i.e. %%. делайте это везде применимо, я сделал это для post.content & post.plain_content.
query = "INSERT INTO post (title, countVote, lastReplyTime, lastReplyerId, posterId, content, plainContent, relateUnit) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);"
cursor.execute(query,post.title, post.count_vote, post.last_reply_time, post.last_replyer_id, post.poster_id, post.content.replace("%", "%%"), post.plain_content.replace("%", "%%"), post.relate_unit)
...