psycopg2使用dict + dict或dict +变量将绑定变量绑定到insert查询中

时间:2018-02-21 15:43:25

标签: psycopg2

我在查询之外有dict和变量。我使用插值 像这样的绑定变量:

self.cur.execute("""
    INSERT INTO
        items (sku, external_id, url, price, in_stock, title, created_at)
    VALUES
        (%(sku)s, %(external_id)s, %(url)s,  %(price)s, %(in_stock)s, %(title)s, now()) RETURNING id
    """, item)

现在我想添加额外的字段来查询哪个不在对象中,而是在之前计算的变量,如下所示:

retailer_id = self.retailer_ids[item.name] # <- here we go!
self.cur.execute("""
    INSERT INTO
        items (sku, external_id, url, price, in_stock, title, created_at, retailer_id)
    VALUES
        (%(sku)s, %(external_id)s, %(url)s,  %(price)s, %(in_stock)s, %(title)s, now(), %s) RETURNING id
    """, (item, retailer_id,))

但它不起作用。我尝试了很多方法,但没有一种方法可以工作。

所以我决定解决方法,将我的对象转换为dict并手动添加zeroiler_id,如下所示:

retailer_id = self.retailer_ids[item.name]
item_dict = dict(item)
item_dict['retailer_id'] = retailer_id
try:
    self.cur.execute("""
        INSERT INTO
            items (sku, external_id, url, price, in_stock, title, created_at, retailer_id)
        VALUES
            (%(sku)s, %(external_id)s, %(url)s,  %(price)s, %(in_stock)s, %(title)s, now(), %(retailer_id)s) RETURNING id
        """, item_dict)

显然,它正在发挥作用。

现在我很好奇,是否可以使用dict + variable或两个dicts撰写查询。

1 个答案:

答案 0 :(得分:1)

不,不是

在此处插入其他29个字符。