在Python中添加一个变量来插入查询。

问题描述 投票:0回答:1

我读取的文本文件是在 csv 有三个字段。但是,我想添加 user_idsession_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']]
python psycopg2
1个回答
0
投票

你只是通过 rsltcur.executemany()含有 user_idsession_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/listdictionary所以你不能混合占位符。所以所有的占位符都是 %s%(user_id)s, %(session)s

© www.soinside.com 2019 - 2024. All rights reserved.