pyodb c вставить запрос с предложением where со значениями переменных - PullRequest
0 голосов
/ 12 марта 2020

Я хочу вставить различные значения переменных в SQl, где значения не должны присутствовать в таблице, используя pyodb c, но выдает ошибку.

переменные

for data in datafield:
  id = data.Id
  iname = data.name
  ivalue = data.value
  cursor.execute("INSERT INTO Description (SrId, FieldName, FieldValue) VALUES (?, ?, ?) WHERE IN (SELECT * from Description WHERE SrId <>id AND FieldName<>iname AND FieldValue<>ivalue)", (id, iname, ivalue))
  connection.commit()

Использование Pyodb c для соединения сервера Sql с python

Ошибка: синтаксическая ошибка

Ответы [ 2 ]

1 голос
/ 13 марта 2020

На SQL сервере нет синтаксиса VALUES...WHERE. Рассмотрите возможность вставки с помощью LEFT JOIN...NULL в конструкторе табличных значений , чтобы избежать дублирования:

# PREPARED STATEMENT WITH QMARK PLACEHOLDERS
sql = """INSERT INTO Description (SrId, FieldName, FieldValue) 
         SELECT vals.SrId, vals.FieldName, vals.FieldValue
         FROM Description d
         LEFT JOIN (VALUES (?, ?, ?)) AS vals(SrId, FieldName, FieldValue)   
           ON d.SrId  = vals.SrId 
           AND d.FieldName = vals.FieldName
           AND d.FieldValue = vals.FieldValue
         WHERE d.SrId IS NULL 
            OR d.FieldName IS NULL
            OR d.FielValue IS NULL
      """

# BIND PARAMS
cur.execute(sql, (id, iname, ivalue))
connection.commit()
0 голосов
/ 12 марта 2020

У вас есть дополнительные " в конце строки.

cursor.execute("INSERT INTO Description (SrId, FieldName, FieldValue) VALUES (?, ?, ?) WHERE IN (SELECT * from Description WHERE SrId <>id AND FieldName<>iname AND FieldValue<>ivalue)", (id, iname, ivalue)")

Должно быть

cursor.execute("INSERT INTO Description (SrId, FieldName, FieldValue) VALUES (?, ?, ?) WHERE IN (SELECT * from Description WHERE SrId <>id AND FieldName<>iname AND FieldValue<>ivalue)", (id, iname, ivalue))
...