混合占位符、executemany 和表名

Posted

技术标签:

【中文标题】混合占位符、executemany 和表名【英文标题】:mixing placeholders, executemany, and table names 【发布时间】:2019-08-06 19:09:01 【问题描述】:

我可以使用以下代码遍历 python 对象,但是我希望能够为模式和表名使用占位符,通常我使用 ..format() 方法来执行此操作,但是如何做你把两者结合起来了吗?

cur.executemany("INSERT INTO schema.table_name (x,y,z) "
                        "values (%s, %s, %s)", top_sample)

【问题讨论】:

【参考方案1】:

我不确定是什么问题。你可以像这样很好地使用format

cur.executemany("INSERT INTO . (x,y,z) values (%s, %s, %s)".format('hello', 'world'), top_sample)

【讨论】:

【参考方案2】:
cur.executemany(
  """INSERT INTO schema.table_name (x,y,z) values (%s, %s, %s)""".format(table_name=your_table_name),
  top_sample
)

用你的表名代替 your_table_name

【讨论】:

【参考方案3】:

取决于您使用的python,您可以尝试使用f-string

schema = "schema"
table_name = "table_name"

cur.executemany(f"INSERT INTO schema.table_name (x,y,z) values (%s, %s, %s)", top_sample)

检查PEP 498 -- Literal String Interpolation

另一种选择是简单的format

cur.executemany("INSERT INTO schema.table_name (x,y,z) values (%s, %s, %s)".format(schema=schema, table_name=table_name), top_sample)

但我发现第一个选项更短更简洁

【讨论】:

以上是关于混合占位符、executemany 和表名的主要内容,如果未能解决你的问题,请参考以下文章

Sass之混合宏继承占位符

Sass之混合宏继承占位符

Select2 加载远程数据与占位符下拉列表的混合

sass学习笔记:混合宏VS继承VS占位符

Sass 混合宏继承占位符 详解

记录 splite3 库的一个坑(表名和字段定义不能用占位符?)