Python - как оформить вставку SQL в оператор со значением 'in

0

Я перемещаю данные из MySQL в MSSQL, но у меня есть проблема с вставкой в оператор, когда у меня есть значение.

для экспорта я использовал следующий код:

import pymssql
import mysql.connector

conn = pymssql.connect(host='XXX', user='XXX', 
password='XXX', database='XXX')
sqlcursor = conn.cursor()


cnx = mysql.connector.connect(user='root',password='XXX', 
database='XXX')
cursor = cnx.cursor()
sql= "SELECT Max(ID) FROM XXX;"
cursor.execute(sql)
row=cursor.fetchall()

maxID = str(row)
maxID = maxID.replace("[(", "")
maxID = maxID.replace(",)]", "")

AMAX = int(maxID)

LC = 1
while LC <= AMAX:
  LCC = str(LC)
  sql= "SELECT * FROM XX where ID ='"+ LCC +"'"
  cursor.execute(sql)
  result = cursor.fetchall()

  data = str(result)
  data = data.replace("[(","")
  data = data.replace(")]","")
  data = data.replace("None","NULL")
  #print(row)
  si = "insert into [XXX].[dbo].[XXX] select " + data 
  #print(si)
  #sys.exit("stop") 
  try:    
      sqlcursor.execute(si)
      conn.commit()
  except Exception:   
      print("-----------------------")
      print(si)
  LC = LC + 1
print('Import done | total count:', LC)

Он работает нормально, пока я не "в одном из моих значений:

'N', '0000000000', **"test string nice company"**

Я хотел бы избежать вовлечения данных в столбцы, а затем проверить, есть ли "в данных", поскольку моя таблица содержит около 500 полей.

Есть ли разумный способ заменить "на"?

Ответ:

Добавлен SET QUOTED_IDENTIFIER OFF для вставки инструкции:

si = "SET QUOTED_IDENTIFIER OFF insert into [TechAdv].[dbo].[aem_data_copy] 
select " + data 
  • 0
    Вы открываете себя для атак SQL-инъекций, используя эту технику.
Теги:
sql-server

1 ответ

1
Лучший ответ

В MSSQL вы можете SET QUOTED_IDENTIFIER OFF, тогда вы можете использовать двойные кавычки, чтобы избежать одиночной цитаты, или использовать две одинарные кавычки, чтобы избежать одной цитаты.

  • 0
    Ну, я думаю, что это работает, когда я копирую строку в SQL, однако Python по-прежнему выдает исключение?
  • 2
    две одинарные кавычки, чтобы избежать одной кавычки - это способ ANSI SQL.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню