MySQL插入与List Comprehensions

时间:2015-11-06 14:53:30

标签: python mysql list list-comprehension executemany

我一直试图通过使用List Comprehension将我的大多数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的列表理解,列表Handle包含每个成员的数据以使用executemany命令,如上例所示?

例如,要抓取[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'}] 示例:

{{1}}

1 个答案:

答案 0 :(得分:2)

您可以使用executemany的映射。插值将根据您的字典工作。由于您的target_org是带有密钥' s的字典列表。 所以你可以这样做:

cursor.executemany( "INSERT INTO Orgs (sid) VALUES (%(sid)s);", target_org) 

我认为这也适用于你的第二个问题。

请参阅:https://www.python.org/dev/peps/pep-0249/#paramstyle了解python db-api中的参数