Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将数组列表格式化为字符串_Python_Python 2.7 - Fatal编程技术网

Python将数组列表格式化为字符串

Python将数组列表格式化为字符串,python,python-2.7,Python,Python 2.7,我希望获取一个数组列表并将其附加到字符串 Python 2.7.10,Windows 10 该列表从mySQL表加载,输出如下: skuArray = [('000381001238',) ('000381001238',) ('000381001238',) ('FA200513652',) ('000614400967',)] 我想把这个列表附加到一个单独的查询中 问题: query = "SELECT ItemLookupCode,Description, Quantity, Price

我希望获取一个数组列表并将其附加到字符串

Python 2.7.10,Windows 10

该列表从mySQL表加载,输出如下:

skuArray = [('000381001238',) ('000381001238',) ('000381001238',) ('FA200513652',) ('000614400967',)]
我想把这个列表附加到一个单独的查询中

问题:

query = "SELECT ItemLookupCode,Description, Quantity, Price, LastReceived "
query = query+"FROM Item "
query = query+"WHERE ItemLookupCode IN ("+skuArray+") " 
query = query+"ORDER BY LastReceived ASC;"
我得到一个错误:

TypeError: cannot concatenate 'str' and 'tuple' objects
我猜我需要将字符串格式化为:

'000381001238', '000381001238', '000381001238', 'FA200513652','000614400967'
最终字符串需要读取:

query = query+"WHERE ItemLookupCode IN ('000381001238', '000381001238', '000381001238', 'FA200513652','000614400967') "
我尝试了以下方法:

skuArray = ''.join(skuArray.split('(', 1))
skuArray = ''.join(skuArray.split(')', 1))
第二次尝试:

skus = [sku[0] for sku in skuArray]
stubs = ','.join(["'?'"]*len(skuArray))


msconn = pymssql.connect(host=r'*', user=r'*', password=r'*', database=r'*')
cur = msconn.cursor()
query ='''
SELECT ItemLookupCode,Description, Quantity, Price, LastReceived
FROM Item 
WHERE ItemLookupCode IN { sku_params }
ORDER BY LastReceived ASC;'''.format(sku_params = stubs)
cur.execute(query, params=skus)
row = cur.fetchone()
print row[3]
cur.close()
msconn.close()

提前感谢您的帮助

假设
skuArray
是一个列表,如下所示:

>>> skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
>>> ', '.join(["'{}'".format(x[0]) for x in skuArray])
"'000381001238', '000381001238', '000381001238', 'FA200513652', '000614400967'"
您可以按如下方式格式化字符串:

>>> skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
>>> ', '.join(["'{}'".format(x[0]) for x in skuArray])
"'000381001238', '000381001238', '000381001238', 'FA200513652', '000614400967'"

假设
skuArray
是一个列表,如下所示:

>>> skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
>>> ', '.join(["'{}'".format(x[0]) for x in skuArray])
"'000381001238', '000381001238', '000381001238', 'FA200513652', '000614400967'"
您可以按如下方式格式化字符串:

>>> skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
>>> ', '.join(["'{}'".format(x[0]) for x in skuArray])
"'000381001238', '000381001238', '000381001238', 'FA200513652', '000614400967'"

如果要执行直插式SQL,可以使用列表理解:

', '.join(["'{}'}.format(sku[0]) for sku in skuArray])
注意:需要在元组之间添加逗号(基于示例)

也就是说,如果您想使用sql,我建议您使用

下面是一个示例,说明如何执行类似操作:

skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
skus = [sku[0] for sku in skuArray]
stubs = ','.join(["'?'"]*len(skuArray))

qry = '''
SELECT ItemLookupCode,Description, Quantity, Price, LastReceived 
FROM Item 
WHERE ItemLookupCode IN ({ sku_params })
ORDER BY LastReceived ASC;'''.format(sku_params = stubs)

#assuming pyodbc connection syntax may be off
conn.execute(qry, params=skus)
为什么?


非参数化查询是一个坏主意,因为它使您容易受到sql注入的影响,并且很容易避免。

如果您想直接使用内联sql,可以使用列表理解:

', '.join(["'{}'}.format(sku[0]) for sku in skuArray])
注意:需要在元组之间添加逗号(基于示例)

也就是说,如果您想使用sql,我建议您使用

下面是一个示例,说明如何执行类似操作:

skuArray = [('000381001238',), ('000381001238',), ('000381001238',), ('FA200513652',), ('000614400967',)]
skus = [sku[0] for sku in skuArray]
stubs = ','.join(["'?'"]*len(skuArray))

qry = '''
SELECT ItemLookupCode,Description, Quantity, Price, LastReceived 
FROM Item 
WHERE ItemLookupCode IN ({ sku_params })
ORDER BY LastReceived ASC;'''.format(sku_params = stubs)

#assuming pyodbc connection syntax may be off
conn.execute(qry, params=skus)
为什么?



非参数化查询是一个坏主意,因为它使您容易受到sql注入的影响,并且很容易避免。

不要将变量格式化为sql语句。使用占位符。是的,我确实了解SQL注入方面。。我会开枪的。谢谢“输出是这样的”你确定吗?这看起来不像元组或列表的常规Python表示。看起来更像是一个由一个元素元组组成的元组,但不完全是。。。请显示准确的输出,包括所有括号和逗号,并可能告诉我们显示的
类型(SKU数组)
。是的。这是我打印列表时输出的。
“选择ItemLookupCode、描述、数量、价格、LastReceived from item where ItemLookupCode,按LastReceived ASC的{}顺序排列。”。格式化(tuple(skuArray中的x代表x))
。不要将变量格式化为SQL语句。使用占位符。是的,我确实了解SQL注入方面。。我会开枪的。谢谢“输出是这样的”你确定吗?这看起来不像元组或列表的常规Python表示。看起来更像是一个由一个元素元组组成的元组,但不完全是。。。请显示准确的输出,包括所有括号和逗号,并可能告诉我们显示的
类型(SKU数组)
。是的。这是我打印列表时输出的。
“选择ItemLookupCode、描述、数量、价格、LastReceived from item where ItemLookupCode,按LastReceived ASC的{}顺序,”“”。格式(tuple(x代表skuArray中的x))
。您假设
skuArray
是一个列表。是的,这是一个列表。谢谢。您假设
skuArray
是一个列表。是的,这是一个列表。谢谢你。谢谢你的帮助。再次感谢-但是我得到了一个错误,因为没有第二个逗号:('000381001238',),这里有什么想法吗?编辑:我已经用这个代码更新了我的问题(更干净)你需要将它作为元组还是直接搜索值?你得到了什么错误?回溯。。“,第60行,按上次收到的ASC的顺序;”。格式(sku_参数=存根)键错误:“sku_参数”感谢您的帮助。再次感谢-但是我收到了一个错误,因为没有第二个逗号:('000381001238',),这里有什么想法吗?编辑:我已经用此代码更新了我的问题(更干净)您需要将其作为元组还是直接进行值搜索?您得到了什么错误?回溯..“,第60行,按最后收到的ASC的顺序;''。格式化(sku参数=存根)键错误:“sku参数”