使用Python3.x格式在一个字符串中打印列表、字符串和dict

使用Python3.x格式在一个字符串中打印列表、字符串和dict,python,python-3.x,string,string-formatting,Python,Python 3.x,String,String Formatting,我希望将查询数据库所需的字符串格式化如下: SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10 conf = { 'fields': ['field1', 'field2'], 'measurement': 'measurement', 'limit': 10, 'tags': {'node': 'name1'} } QUERY = 'SEL

我希望将查询数据库所需的字符串格式化如下:

SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10
conf = {
  'fields': ['field1', 'field2'],
  'measurement': 'measurement',
  'limit': 10,
  'tags': {'node': 'name1'}
}
    QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 LIMIT {}'.format(
             '","'.join(conf['fields'],
             conf['measurement'],
             conf['limit'])
以下内容出自一条格言:

  • field1
    field2
  • 测量
  • 节点
    名称1
  • 10
格言如下:

SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10
conf = {
  'fields': ['field1', 'field2'],
  'measurement': 'measurement',
  'limit': 10,
  'tags': {'node': 'name1'}
}
    QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 LIMIT {}'.format(
             '","'.join(conf['fields'],
             conf['measurement'],
             conf['limit'])
我可以将字符串格式化为字符串的一部分(不带
标记
),如下所示:

SELECT "field1", "field2" FROM "measurement" where "status"=0 AND "node"='name1' LIMIT 10
conf = {
  'fields': ['field1', 'field2'],
  'measurement': 'measurement',
  'limit': 10,
  'tags': {'node': 'name1'}
}
    QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 LIMIT {}'.format(
             '","'.join(conf['fields'],
             conf['measurement'],
             conf['limit'])
这为我提供了:

SELECT "field1", "field2" FROM measurement WHERE "status"=0 LIMIT 10
问题
标记
中的键值对在许多情况下是动态的,即以前没有已知的
(在本例中为
节点

对于字符串:

QUERY = 'SELECT {} FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}
我希望动态地填充字符串格式
和“{}”=\'{}\'
(事先不知道
标记中的键值对

我如何做到这一点

我不确定是否:

QUERY = 'SELECT "{}" FROM {} WHERE "status"=0 AND "{}"=\'{}\' LIMIT {}'.format(
                '","'.join(conf['fields']),
                conf['measurement'],
                **conf['tags'],
                conf['limit']
            )
当它抛出以下语法错误时工作:

SyntaxError: positional argument follows keyword argument unpacking

我已经预先使用字典
conf['tags']
创建了格式化字符串,以便于应用于
QUERY

conf = {
  'fields': ['field1', 'field2'],
  'measurement': 'measurement',
  'limit': 10,
  'tags': {'node': 'name1'}
}

#Create the string using dictionary
dict_str = ''.join('"{}"=\'{}\''.format(key,value) for key, value in conf['tags'].items())

#Create the final format string
QUERY = 'SELECT "{}" FROM "{}" WHERE "status"=0 AND {} LIMIT {}'.format(
                '","'.join(conf['fields']),
                conf['measurement'],
                dict_str,
                conf['limit']
            )
print(QUERY)
输出将是

SELECT "field1","field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10

如果您使用的是python 3.6及更高版本,则有一种使用指定的f字符串进行字符串格式化的新方法。我不确定我是否理解您的请求,但我认为您的意思是:

key = list(conf['tags'].keys())[0]

QUERY = f"""SELECT {conf['fields'][0]}, {conf['fields'][1]} FROM "{conf['measurement']}" WHERE "status"=0 AND "{key}"='{conf['tags'][key]}' LIMIT {conf['limit']}"""
这将导致以下字符串:

SELECT "field1", "field2" FROM "measurement" WHERE "status"=0 AND "node"='name1' LIMIT 10

你的
conf
是什么样子的,你能补充一下吗?它已经被添加了:参见
conf
dict@Shan-Desai是
标记
始终只有一个键值对?@Adam.Er8对于初始情况是。如果我们使用
,您的第一个字符串只能用python表示“
,既然其中都有单引号和双引号,对吗?为什么有
”节点?”='name1'
而不是
node=name1
?对我来说很有用!我查看了客户机库,可能有一些东西,其中一个是对所有内容进行一般查询,然后使用
标记
dict对其进行解析,但您的解决方案更干净,更易于使用。