我是数据库和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”以某种方式解释为十六进制,所以我得到错误?你能帮我解决这个问题吗?谢谢你的帮助
当其他人在代码中看到我可以做得更好的东西时,我真的很想听听你的建议:)
答案 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中的一个错误。尝试更新到最新版本。
希望这有帮助。