MySQL 使用列表理解插入
MySQL insert with List Comprehensions
我一直在尝试通过使用 List Comprehensions 将我的大部分 mysqlclient 执行命令转换为在一行中完成。下面的代码片段就是一个例子:
def org(conn, cursor, target_org=None, target_sid=None):
try:
if target_sid is not None:
target_org = [{"sid": target_sid}]
cursor.executemany(
"INSERT INTO `Orgs` (`sid`) VALUES (%s);",
[[Org['sid']] for Org in target_org])
conn.commit()
...
但是,如果我想要一个 MySQL 查询来填充多列,例如
"INSERT INTO `Citizens`(`Handle`,`Org`,`Role`,`Rank`,`Visibility`,`Stars`,`Type`)VALUE(%s,%s,%s,%s,%s,%s,%s)"
我如何实现列表理解接收列表 member
由列表组成,每个成员的数据都与上面的示例一样使用 executemany 命令?
例如,仅抓取 Handle
列看起来像
[Mem['handle'] for Mem in member]
# (cursor.executemany must always have a list as second argument)
member
样本:
[{'roles': [], 'rank': 'No SCB account', 'type': 'main', 'stars': 2, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'freakyeagle'}, {'roles': [], 'rank': 'Fleet Member', 'type': 'main', 'stars': 1, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'cadimus'}, {'roles': [], 'rank': 'Fleet Member', 'type': 'main', 'stars': 1, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'belleal'}]
您可以将映射与 executemany
结合使用。插值将根据您的字典进行。由于您的 target_org
是键为 'sid' 的字典列表
所以你可以这样做:
cursor.executemany( "INSERT INTO Orgs (sid) VALUES (%(sid)s);", target_org)
我认为这也适用于您的第二个问题。
参见:https://www.python.org/dev/peps/pep-0249/#paramstyle python db-api
中的参数
我一直在尝试通过使用 List Comprehensions 将我的大部分 mysqlclient 执行命令转换为在一行中完成。下面的代码片段就是一个例子:
def org(conn, cursor, target_org=None, target_sid=None):
try:
if target_sid is not None:
target_org = [{"sid": target_sid}]
cursor.executemany(
"INSERT INTO `Orgs` (`sid`) VALUES (%s);",
[[Org['sid']] for Org in target_org])
conn.commit()
...
但是,如果我想要一个 MySQL 查询来填充多列,例如
"INSERT INTO `Citizens`(`Handle`,`Org`,`Role`,`Rank`,`Visibility`,`Stars`,`Type`)VALUE(%s,%s,%s,%s,%s,%s,%s)"
我如何实现列表理解接收列表 member
由列表组成,每个成员的数据都与上面的示例一样使用 executemany 命令?
例如,仅抓取 Handle
列看起来像
[Mem['handle'] for Mem in member]
# (cursor.executemany must always have a list as second argument)
member
样本:
[{'roles': [], 'rank': 'No SCB account', 'type': 'main', 'stars': 2, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'freakyeagle'}, {'roles': [], 'rank': 'Fleet Member', 'type': 'main', 'stars': 1, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'cadimus'}, {'roles': [], 'rank': 'Fleet Member', 'type': 'main', 'stars': 1, 'visibility': 'visible', 'sid': 'imperium', 'handle': 'belleal'}]
您可以将映射与 executemany
结合使用。插值将根据您的字典进行。由于您的 target_org
是键为 'sid' 的字典列表
所以你可以这样做:
cursor.executemany( "INSERT INTO Orgs (sid) VALUES (%(sid)s);", target_org)
我认为这也适用于您的第二个问题。
参见:https://www.python.org/dev/peps/pep-0249/#paramstyle python db-api
中的参数