无法将特定字符串写入mssql数据库

时间:2015-07-08 11:13:36

标签: python sql-server pymssql

我是数据库和python的新手。我用我的脚本读了很多日志文件,并将数据写入MSSql Express数据库并使用pymssql。日志文件采用.csv格式,如下所示:

  

ID; REQUEST
  3gix2v2h2mjmmybrf4p5blbm; 49db032f0a144efeb1e0e690b4e6a26f; kzbcaakb2ex44dnhrqi4kgvt; 28042afb61b44c539fbaa1ac4c303665;

ID和REQUEST在数据库中定义为VARCHAR(50)。

我的脚本工作正常,我在数据库中写了大约70000个条目,直到其中一个日志文件中有值的行:

  

0xaf3azaza5sb1ztogqfdmwb; 934d4978a40c451b8f4080791f752453

出现。我收到错误:

  

pymssql.ProgrammingError:(102,“'zaza5sb1ztogqfdmwb'.DB-Lib错误消息20018附近的语法不正确,严重性为15)

这是我的剧本:

for filename in os.listdir(sFolderlocation):
    if "archive" in  filename:            
        with open(sFolderlocation + os.sep + filename, 'r') as f:
            reader = csv.reader(f,delimiter=';')
            skipfirstline = True
            for row in reader:
                werte=[]
                if skipfirstline:
                    skipfirstline = False
                    continue
                werte.append(row[0])    #ID
                werte.append(row[1])    #maprequest
                werte=tuple(werte)                    
                cursor.execute(
                    "INSERT INTO webgis_test (SESSIONID,MAPREQUESTID) VALUES (%s, %s)",
                    werte)
                conn.commit()

是“0xaf3a”以某种方式解释为十六进制,所以我得到错误?你能帮我解决这个问题吗?谢谢你的帮助

当其他人在代码中看到我可以做得更好的东西时,我真的很想听听你的建议:)

2 个答案:

答案 0 :(得分:1)

感谢Dan Guzman。文字不是用引号括起来的。

这个python代码有效:

cursor.execute(
"INSERT INTO webgis_test2 (SESSIONID, MAPREQUESTID) VALUES ('"+werte[0]+"','"+werte[1]+"');")

答案 1 :(得分:0)

在MSSQL中,VARCHAR字段用于存储非unicode数据。看起来CSV文件中存在无效字符,MSSQL无法将其存储在VARCHAR字段中。

请注意,您发布的行以0xaf3a开头,这可能是此无效字符的十六进制代码。

如果您的文件中有这6个符号0xaf3a而不是伪造行中的一个unicode字符,那么我想这是pymssql中的一个错误。尝试更新到最新版本。

希望这有帮助。