我有一个带有简单id和name列的数据库表,以及一个带有一些虚拟名称的csv文件,其中一些是重复的。我试图只读取唯一值。
def readCsv(fileName):
#open connection
reader = csv.DictReader(open(fileName, encoding="utf8"))
connection = pyodbc.connect(
'DRIVER=' + DRIVER + ';PORT=1433;SERVER=' + SERVER + ';PORT=1433;DATABASE=' + DATABASE + ';UID=' + USERNAME + ';PWD=' + PASSWORD)
cursor = connection.cursor()
#Reading of the file
counter = 0
#Iterate line by line
for line in reader:
insertSql = "INSERT INTO Dummy VALUES(?)"
result = cursor.execute(insertSql,
line['name'])
cursor.commit()
counter+= 1
这正确输入了数据库中的所有名称,但我有一些我不想要的重复名称。 我已经尝试过使用INSERT IGNORE,但是这会以某种方式返回INTO不正确的错误?
insertSql = "INSERT IGNORE INTO Dummy VALUES(?)"
pyodbc.ProgrammingError:('42000',“[42000] [Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]关键字'INTO'附近的语法不正确。(156)(SQLExecDirectW)”)
我使用ON DUPLICATE得到了类似的结果,它只是说现在ON无效。
insertSql = "INSERT INTO Dummy VALUES(?) ON DUPLICATE KEY UPDATE name=name"
pyodbc.ProgrammingError:('42000',“[42000] [Microsoft] [SQL Server的ODBC驱动程序13] [SQL Server]关键字'ON'附近的语法不正确。(156)(SQLExecDirectW)”)
我认为其中一个应该可行,但我不知道我在这里做错了什么?