我正在编写一个简单的脚本,在这个脚本中,Python读取一堆以tab分隔的文件,然后逐行将行中的第一项输入到sqlite3表中。除实际数据外,该过程运行良好。发送给我的数据格式是123-4567890-1234567(3-7-7)。我没有在数据库中看到完整的字符串,而是得到字符串中三个数字的算术结果,即-5802334。你知道吗
我尝试过各种带引号的组合,例如Lines[0] = "'" + Lines[0] + "'"
(我得到一个错误,最后一项是一个无法识别的标记)或Lines[0] = Lines[0].replace('-','_')
(“OperationalError:unrecogned token:”114_“)
. 你知道吗
你能告诉我我做错了什么,和/或如何克服这个问题吗?你知道吗
这是我的完整代码:
import sqlite3, os, fnmatch, csv, datetime
Homedir = os.path.expanduser('~')
DBFile = Homedir + '\\Desktop\\AmazonProg\\AmazonOrders.sqlite'
Rawpathin = '\\\\idc-v-lapedi01\\amtu2\\Data\\production\\reports\\'
#TableName = 'OrderNums'
#IdColumn = 'Orderid'
#POColumn = 'PONum'
sTimestamp = datetime.datetime.now().strftime('%Y%m%d%H%M')
Lines = []
conn = sqlite3.connect(DBFile)
c = conn.cursor()
Amzfiles=fnmatch.filter(os.listdir(Rawpathin), 'order*.txt')
for Files in Amzfiles:
with open(Rawpathin + Files, "r") as Source:
Reader = csv.reader(Source, delimiter = '\t')
for Lines in Reader:
if Lines[0] == 'order-id':
pass
elif len(Lines[0])== 19:
c.execute("INSERT OR IGNORE INTO OrderNums (Orderid, PONum, Timestamp) VALUES ({idf}, {v1}, {v2})".format(idf=Lines[0], v1=Lines[0][12:], v2 = sTimestamp))
else:
pass
conn.commit()
conn.close()
先谢谢你。你知道吗
底线是您不应该为此使用
str.format
,因为它是不安全的,而且在您的情况下,它也不会产生您期望的结果。你知道吗幸运的是,这个问题早就解决了。对于您,只需将
c.execute
行更改为:回顾文档可能是一个好主意-这里有一些非常有用的示例:
https://docs.python.org/3.5/library/sqlite3.html
相关问题 更多 >
编程相关推荐