如何在字段中插入带字符[']的表(pymssql)

时间:2016-12-17 15:32:27

标签: python sql-server pymssql

我试图使用python从csv文件填充我的数据库。 下面是我用来填充friend std::ostream& operator<<(std::ostream& stream, const yourclass& yourclass) 表的代码:

std::cout << a;

std::stringstream ss;
ss << a;   // this makes a-to-text, even respecting locale informations.

但是,我的一些数据在其名称列中包含字符:(&#39;)(例如刺客的信条)。这导致了错误,如下所示:

sales

除手动更新行外,是否有其他解决方法(例如import csv import pymssql as psql conn = psql.connect('localhost:8888', 'SA', 'superSecret','videogame') cursor = conn.cursor() cursor.execute(""" IF OBJECT_ID('sales', 'U') IS NOT NULL DROP TABLE sales CREATE TABLE sales ( Id int, Name varchar(250), Platform varchar(250), Year int, Genre varchar(250), Publisher varchar(250), NA_Sales float, EU_Sales float, JP_Sales float, Other_Sales float, Global_Sales float ) """) conn.commit() with open ('./sales.csv', 'r') as f: reader = csv.reader(f) for row in reader: row[1] = row[1].replace("'", "") row[5] = row[5].replace("'", "") data = tuple(row) query = 'insert into sales values {0}'.format(data).replace("N/A","0") print(query) cursor.execute(query) conn.commit() conn.close()

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用正确的参数化查询,如下所示:

row = ["Assassin's", "N/A", 9]  # test data as list (e.g., from CSV)
data = tuple("0" if x=="N/A" else x for x in row)
print(data)  # ("Assassin's", '0', 9)
placeholders = ','.join(['%s' for i in range(len(data))])
query = 'INSERT INTO sales VALUES ({0})'.format(placeholders)
print(query)  # INSERT INTO sales VALUES (%s,%s,%s)
cursor.execute(query, data)

答案 1 :(得分:0)

您可以将'替换为\',这样可以在保留数据中的撇号时停止崩溃:

with open ('./sales.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        row[1] = row[1].replace("'", "\'")
        row[5] = row[5].replace("'", "\'")
        data = tuple(row)
        query = 'insert into sales values {0}'.format(data).replace("N/A","0")
        print(query)
        cursor.execute(query)