我读取的文本文件是在 csv
有三个字段。但是,我想添加 user_id
和 session_id
变量插入到INSERT语句中,这样它们就会被插入到 4-column tblUser
表。
user_id = 123
session_id = 999
with open(file, 'r') as f:
data = f.readlines()
rslt = [line.strip().split(',') for line in data]
query = "INSERT INTO tblUser (user_id, session_id, date, time)" \
"VALUES (%{user_id}, %{session_id},%s,%s,)"
cur.executemany(query, rslt)
错误。
list index out of range
似乎我不能替换变量(使用 %s
). 我如何将它追加到结果中并发送到数据库中?
文件。user.txt
[['2008-10-30', '23:40:27'],['2009-04-05', '06:46:15'],['2009-04-05', '03:59:09']]
EDIT
使用 rslt = [user_id, session_id] + rslt
结果是以下列表(又是一个错误)。
['123', '999', ['2008-10-30', '23:40:27'],['2009-04-05', '06:46:15'],['2009-04-05', '03:59:09']]
错误。
string index out of range
预期的输出。
[ ['123', '999','2008-10-30', '23:40:27'],['123', '999','2009-04-05', '06:46:15'],['123', '999','2009-04-05', '03:59:09']]
你只是通过 rslt
到 cur.executemany()
含有 user_id
和 session_id
,把它们加在前面 rslt
:
rslt = [line.strip().split(',') for line in data]
rslt = [[user_id, session_id] + item for item in rlst] # add user/session_id to each nested list.
# triple quotes make multiline strings, to get rid of backslash escaping!
query = """
INSERT INTO tblUser
(user_id, session_id, date, time)
VALUES
(%s,%s,%s,%s)"""
cur.executemany(query, rslt)
另外,如果您想使用字典,占位符以s结尾。%(session_id)s
注意:: 你可以只传递一个变量给 executemany
即乙醚 tuple/list
或 dictionary
所以你不能混合占位符。所以所有的占位符都是 %s
或 %(user_id)s, %(session)s