Python MySQLdb cursor.execute() 插入不同数量的值
Python MySQLdb cursor.execute() insert with varying number of values
有人问过类似的问题,但所有这些问题 - 例如 This One 仅处理指定数量的值。
例如,我尝试按以下方式执行此操作:
def insert_values(table, columns, values, database):
"""
columns - a string representing tuple with corresponding columns
values - a tuple containing values
"""
query=database.cursor()
query.execute("INSERT INTO `{}` {} VALUES{}".format(table,columns,str(values)))
但这并不好 - 虽然插入最初看起来很好(接受并提交给数据库),但很快数据类型错误开始出现,这是由于将所有数据类型转换为字符串。例如:
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
我最初的方法还涉及预转换日期时间对象,这可能不是 MySQLdb 的创建者所想的。
我在 MySQLdb 的其他示例中看到的方式涉及字符串插值,但这意味着将变量数定义为“%s”,并且它没有给代码带来灵活性。
我如何定义一个方法,它可以接受任意数量的、以前未定义的值,这些值将与 MySQLdb 兼容?可能吗?还是我遗漏了有关字符串插值的内容?
[编辑] 我想到的方法的用法示例:
两个数据库:source_db、destination_db
row = source_db.cursor.execute('SELECT x from Y where z='1')
(returns 元组)
insert_values('table_name','(column_name_1,column_name_2)',row, destination_db)
您应该使用字符串插值来为内容生成占位符,然后让 DB-API 填充它们。例如:
placeholders = ','.join('%s' for col in columns)
query_string = "INSERT INTO `{}` {} VALUES ({})".format(table, columns, placeholders)
query.execute(query_string, values)
有人问过类似的问题,但所有这些问题 - 例如 This One 仅处理指定数量的值。
例如,我尝试按以下方式执行此操作:
def insert_values(table, columns, values, database):
"""
columns - a string representing tuple with corresponding columns
values - a tuple containing values
"""
query=database.cursor()
query.execute("INSERT INTO `{}` {} VALUES{}".format(table,columns,str(values)))
但这并不好 - 虽然插入最初看起来很好(接受并提交给数据库),但很快数据类型错误开始出现,这是由于将所有数据类型转换为字符串。例如:
c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))
我最初的方法还涉及预转换日期时间对象,这可能不是 MySQLdb 的创建者所想的。
我在 MySQLdb 的其他示例中看到的方式涉及字符串插值,但这意味着将变量数定义为“%s”,并且它没有给代码带来灵活性。
我如何定义一个方法,它可以接受任意数量的、以前未定义的值,这些值将与 MySQLdb 兼容?可能吗?还是我遗漏了有关字符串插值的内容?
[编辑] 我想到的方法的用法示例:
两个数据库:source_db、destination_db
row = source_db.cursor.execute('SELECT x from Y where z='1')
(returns 元组)
insert_values('table_name','(column_name_1,column_name_2)',row, destination_db)
您应该使用字符串插值来为内容生成占位符,然后让 DB-API 填充它们。例如:
placeholders = ','.join('%s' for col in columns)
query_string = "INSERT INTO `{}` {} VALUES ({})".format(table, columns, placeholders)
query.execute(query_string, values)