mysql / connector python query работает в mysql, но не python

Я видел следующие два ответа:

  • python – запрос mysql не работает
  • SQL-запрос работает в консоли, но не в python

И ни одно из решений не работает для меня. Я запускаю приведенный ниже код, который завершает без каких-либо ошибок каждый раз, но нисколько не меняет таблицу mysql Compounds , и я проверил, что формат входного файла соответствует точному типу моей таблицы mysql и что это правильно разграничен и не пуст.

 import os, sys import mysql.connector from mysql.connector import errorcode from mysql.connector.constants import ClientFlag TABLE_NAME = "Compounds" fullDataFile = "data/compounds/parsed/fullData.csv" cnx = mysql.connector.connect(user='kharland', passwd='password', db='mydb', client_flags=[ClientFlag.LOCAL_FILES]) cursor = cnx.cursor() print "loading data file: %s/%s" % (os.getcwd(), fullDataFile) try: cursor.execute = ( "LOAD DATA LOCAL INFILE '%s/%s'" " REPLACE" " INTO TABLE `%s`" " FIELDS TERMINATED BY '^'" " LINES TERMINATED BY '\n'" " (PUBCHEM_COMPOUND_CID," " PUBCHEM_COMPOUND_CANONICALIZED," " PUBCHEM_CACTVS_COMPLEXITY," " PUBCHEM_CACTVS_HBOND_ACCEPTOR," " PUBCHEM_CACTVS_HBOND_DONOR," " PUBCHEM_CACTVS_ROTATABLE_BOND," " PUBCHEM_CACTVS_SUBSKEYS," " PUBCHEM_IUPAC_INCHI," " PUBCHEM_IUPAC_INCHIKEY," " PUBCHEM_EXACT_MASS," " PUBCHEM_MOLECULAR_FORMULA," " PUBCHEM_MOLECULAR_WEIGHT," " PUBCHEM_OPENEYE_CAN_SMILES," " PUBCHEM_OPENEYE_ISO_SMILES," " PUBCHEM_CACTVS_TPSA," " PUBCHEM_MONOISOTOPIC_WEIGHT," " PUBCHEM_TOTAL_CHARGE," " PUBCHEM_HEAVY_ATOM_COUNT," " PUBCHEM_ATOM_DEF_STEREO_COUNT," " PUBCHEM_ATOM_UDEF_STEREO_COUNT," " PUBCHEM_BOND_DEF_STEREO_COUNT," " PUBCHEM_BOND_UDEF_STEREO_COUNT," " PUBCHEM_ISOTOPIC_ATOM_COUNT," " PUBCHEM_COMPONENT_COUNT," " PUBCHEM_CACTVS_TAUTO_COUNT);" % (os.getcwd(), fullDataFile, TABLE_NAME)) cnx.commit() except mysql.connector.Error as e: sys.stderr.write("x Failed loading data: {}\n".format(e)) 

Однако, если я распечатаю этот запрос на терминал, а затем запустил его в mysql, тогда он работает нормально. Есть ли причина, по которой mysql lib может не выполнить фактический запрос или мне не хватает какого-либо вызова функции?

One Solution collect form web for “mysql / connector python query работает в mysql, но не python”

MySQL не принимает привязку привязки для идентификатора. В этом случае имя таблицы. Это должно быть частью текста SQL. Вы можете подавать только значения, используя привязки.

Вы можете сделать это:

 SELECT t.id FROM mytable t WHERE t.foo = :val ^^^^ 

Но это недействительно :

 SELECT t.id FROM :mytable t WHERE t.foo = 'bar' ^^^^^^^^ 

Вы можете выполнить операцию типа sprintf как предыдущий шаг, чтобы сгенерировать текст SQL (строку), содержащий фактическое имя таблицы, и затем отправить этот текст SQL (строка) в MySQL.

Когда вы cursor.execute до этого cursor.execute , вам понадобится текст SQL, чтобы включить имя таблицы как часть строки. (Также вероятно, что имя файла должно быть указано как литерал и не может быть заполнителем, но я не уверен в этом. То, что я уверен, это имя таблицы.)


В качестве теста попробуйте выполнить hardcoding имя таблицы «Compounds» и hardcoding имя файла в текст SQL …

 cursor.execute = ( "LOAD DATA LOCAL INFILE '/opt/data/compounds/parsed/fullData.csv'" " REPLACE" " INTO TABLE `Compounds`" 
    Python - лучший язык программирования в мире.