【问题标题】:how to pass less parameters to a function for sql queries in python如何将更少的参数传递给python中的sql查询函数
【发布时间】:2020-05-15 20:05:26
【问题描述】:

这是我的代码。我只想更新书名和作者姓名,我希望其他参数值保持不变。我收到如下错误。我应该通过什么不改变参数?我试图将变量名作为 year 和 isbn 传递,但它没有用。我搜索了很多类似的问题,但没有帮助。

def update(id, title, author, year, isbn):
conn = psycopg2.connect("dbname='' user= password='' host='localhost' port='5432' ")
cur = conn.cursor()
cur.execute("UPDATE dnr SET title=%s, author=%s, year=%s, isbn=%s WHERE id=%s", (title, author, year, isbn, id))
conn.commit()
conn.close

update(1, "The Sky", "Jonh Smith")

错误:

TypeError: update() missing 2 required positional arguments: 'year' and 'isbn'

【问题讨论】:

  • 在python函数方面,您需要为参数设置默认值。我推荐None。其他人需要帮助了解如何正确获取 sql 查询
  • 实际上,我尝试了“无”,但随后它将剩余的列打印为“无”,应该保持与以前一样。顺便说一句,它适用于“搜索”功能,将不变的参数(年份,isbn)设置为无,但我认为“更新”功能需要一些不同的东西。
  • 如果您的问题得到解答,请将其标记为solved

标签: python postgresql parameter-passing psycopg2


【解决方案1】:

您可以对可选参数使用默认值并检查它们是否已设置,从而相应地调整查询和数据。

def update(id, title, author, year=None, isbn=None):
    conn = psycopg2.connect("dbname='' user= password='' host='localhost' port='5432' ")
    cur = conn.cursor()
    query = "UPDATE dnr SET title=%s, author=%s"
    data = [title, author]
    if year is not None:
        query += ", year=%s"
        data.append(year)
    if isbn is not None:
        query += ", isbn=%s"
        data.append(isbn)
    query += " WHERE id=%s"
    data.append(id)
    cur.execute(query, data)
    conn.commit()
    conn.close

update(1, "The Sky", "Jonh Smith")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    • 2023-03-10
    • 2013-08-02
    • 2015-04-25
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多