小编x10*_*084的帖子

如何比较多个键值对的两个字典列表?

我有两个lists dict,一个是另一个的修改子集。我想基于两个键来获取list_one未出现在 中的元素list_two。例子:

list_one = [{'name': 'alf', 'age': 25},
            {'name': 'alf', 'age': 50},
            {'name': 'cid', 'age': 30}]
list_two = [{'name': 'alf', 'age': 25, 'hair_color': 'brown'},
            {'name': 'cid', 'age': 30, 'hair_color': 'black'}]
desired_list = [{'name': 'alf', 'age': 50}]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我有一种感觉,它与某种list comprehension,例如:

desired_list = [x for x in list_one if x['name'] != x2['name'] and x['age'] != x2['age'] 
                for all x2 in list_two]
Run Code Online (Sandbox Code Playgroud)

python dictionary python-3.x

4
推荐指数
1
解决办法
1670
查看次数

如何使用带有 IN 子句的 SQL 参数来获取 pyodbc 的可变数量的值?

我有一个值列表,我想在要使用INpyodbc 执行的 SQL (SQL Server) 语句的子句中使用这些值。例子:

files = ['file1', 'file2', ...]  # this list can have a variable number of elements
con = pyodbc.connect(...)

# What I'd like to do
result = con.cursor().execute('SELECT * FROM sometable WHERE file_name IN (?)', files)
Run Code Online (Sandbox Code Playgroud)

但是,当我执行上面的语句时,出现如下错误:

ProgrammingError:('SQL 包含 1 个参数标记,但提供了 18 个参数','HY000')

我可以使用以下内容生成可变参数字符串:

params = ','.join(['?']*len(files))
query = 'SELECT * FROM sometable WHERE file_name IN ({})'.format(params)
result = con.cursor().execute(query, files)
Run Code Online (Sandbox Code Playgroud)

但是如果我理解正确的话,这样做会使我面临 SQL 注入的风险。有没有办法安全地做到这一点?

python sql sql-server pyodbc

4
推荐指数
1
解决办法
746
查看次数

标签 统计

python ×2

dictionary ×1

pyodbc ×1

python-3.x ×1

sql ×1

sql-server ×1