mysql .connector.errors.ProgrammingError: 1064 (42000): у вас есть ошибка в синтаксисе SQL; Казалось бы, невозможно решить - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь обновить ячейку, выбранную на основе 2 функций. Одна функция выбирает строки случайным образом, а другая - случайным образом. Любое значение, которое может содержать ячейка, необходимо заменить на NULL. В 10% строк должна быть одна ячейка NULL.

Код выглядит следующим образом:

import random as rdm

#decide which random rows will be empty
def select_empty_rows(n,empty_rows=[]):
    for i in range(math.ceil(0.1*(n+1))):
        empty_rows.append(rdm.choice(range(n)))   
    return empty_rows

#decide which random columns will be empty
def select_empty_col(col_list=[]):
    empty_col=rdm.choice(col_list)
    return empty_col

#data entry
def data_entry_pkg_info(n):
    query="insert into pkg_info(weight,dimensions,latitude,longitude,isPerishable,isFragile,isHazardous,isDeliverable) values(%s,%s,%s,%s,%s,%s,%s,%s)"
    query2="update pkg_info set %s=NULL where pkg_id=%s" 
    empty_rows=[]
    col_list=['weight','dimensions','latitude','longitude','isPerishable','isFragile','isHazardous','isDeliverable']
    select_empty_rows(n,empty_rows)
    cell=''
    for i in range(n):
        entry=(rdm.uniform(0.00,100.00),rdm.uniform(0.00,100.00),
                   rdm.uniform(-90.00000,90.00000),
                   rdm.uniform(-180.00000,180.00000),rdm.choice([True,False]),
                   rdm.choice([True,False]),rdm.choice([True,False]),
                   rdm.choice([True,False]))
        cur.execute(query,entry)
        if i in empty_rows:
            cols=select_empty_col(col_list)
            if cell not in cols:
                entry=(rdm.uniform(0.00,100.00),rdm.uniform(0.00,100.00),
                       rdm.uniform(-90.00000,90.00000),
                       rdm.uniform(-180.00000,180.00000),rdm.choice([True,False]),
                       rdm.choice([True,False]),rdm.choice([True,False]),
                       rdm.choice([True,False]))
                cur.execute(query,entry)
            else:
                entry=(cols,empty_rows[i])
                cur.execute(query2,entry)
        print(entry)

Точная ошибка выглядит следующим образом:

mysql.connector.errors.ProgrammingError: 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 ''isDeliverable'=NULL where pkg_id=8' at line 1

Я подозреваю, что проблема в том, что имя столбца (в данном случае isDeliverable) заключено в кавычки. Приветствуются другие возможные проблемы и решения.

Заранее всем спасибо!

...