pymysql, использующий обратную цитату в качестве неявного конвертера строк, не работает в Python 3 -

У меня есть следующая ячейка в jupyter (python3):

import pymysql


conn = pymysql.connect(host='localhost', port=3306, user='root',passwd='geheim', db='mysql')
cur = conn.cursor()
cur.execute("DROP DATABASE IF EXISTS foobar")
cur.execute("CREATE DATABASE foobar")
cur.close()
conn.commit()
conn.close()

conn = pymysql.connect(host='localhost', port=3306, user='root',passwd='geheim', db='foobar')
cur = conn.cursor()
cur.execute("DROP TABLE IF EXISTS map")
cur.execute("CREATE TABLE map (name varchar(64), ID integer, Parent_ID integer)")


map = (("A",1,2),
    ("B",4,5),
    ("C",0,0))

print (len(map))

for name,item_id, parent_ID in map:
    print (name, item_id, parent_ID)
    cur.execute("INSERT INTO map VALUES (\"" + name + "\"," + `item_id` + "," + `parent_ID` + ")")

cur.execute("SELECT * FROM map");
print (cur.fetchall())
cur.close()
conn.commit()
conn.close()
# to toggle linenumbers use CTRL-M L

Я верю, чтобы напомнить, что код (оператор INSERT) работал под python 2.7. Теперь, после преобразования в python 3.5, я получаю сообщение об ошибке на первой backtic в операторе INSERT.

Я использовал backtick в Python 2.7 для неявного преобразования из int в string,

Любые подсказки, как это будет работать правильно в python3?

1 ответ

Я обнаружил, что `был использован в Python 2.7 как встроенный для получения представления объекта, который (ab?) Использовался в операторе INSERT для преобразования int в строку. В Python 3 нужно использовать repr(объект)

Оператор INSERT теперь работает с использованием следующей строки: cur.execute("INSERT INTO map VALUES (\"" + name + "\"," + repr(item_id) + "," + repr(parent_ID) + ")")

Другие вопросы по тегам