【问题标题】:My python sqlite update statement doesn't commit我的 python sqlite 更新语句没有提交
【发布时间】:2020-07-13 00:25:19
【问题描述】:

我正在尝试编写一些 Python SQLite3 CRUD 语句。 我想我的更新语句写得正确,但显然有一个我看不到的问题。 语句执行,但数据库不更新。 Insert 和 Read 语句工作正常。 我省略了 create database 和 db_insert() 函数,因为它们正在工作......

我的代码:

    import sqlite3 as sql


    def db_read():
     try:
       conn = sql.connect(database_file)

       c = conn.cursor()

       with conn:
         c.execute("SELECT * FROM netdevices")
         result = c.fetchall()

         conn.commit()

       return result

      except:
       print("Database Read Error")
       print(traceback.format_exc())


    def db_update(record_id, ip_address, device_name, connection_type, username, password):
      try:
        conn = sql.connect(database_file)

        c = conn.cursor()

        with conn:
         sql_cmd = "UPDATE netdevices SET ip_address = @ip_address, device_name = @device_name, connection_type = @connection_type, username = @username, password = @password WHERE id=@record_id"
         sql_values = [record_id, ip_address, device_name, connection_type, username, password]
         c.execute(sql_cmd, sql_values)

         conn.commit()

         print('Database Update Successful')

      except:
       print("Database Update Error")
       print(traceback.format_exc())
      
      
      db_insert(1, '10.10.10.1', 'Gateway', 'ssh', 'cisco', 'cisco')
      db_insert(2, '10.10.10.2', 'WorkshopSwitch', 'telnet', 'cisco', 'cisco')
      print('READ: ' + str(db_read()))
      print('-------')
      db_update(2, '10.10.10.250', 'WorkshopSwitch', 'ssh', 'admin', 'P@ssw0rd1')            # Update not working???
      print('-------')
      print('READ: ' + str(db_read()))

它给出了这个输出:

    Database Insert Successful
    Database Insert Successful
    READ: [(1, '10.10.10.1', 'Gateway', 'ssh', 'cisco', 'cisco'), (2, '10.10.10.2', 'WorkshopSwitch', 'telnet', 'cisco', 'cisco')]
    -------
    Database Update Successful
    -------
    READ: [(1, '10.10.10.1', 'Gateway', 'ssh', 'cisco', 'cisco'), (2, '10.10.10.2', 'WorkshopSwitch', 'telnet', 'cisco', 'cisco')]

如您所见,未进行更新。 也许我通过非常简单的尝试遗漏了一些 SQL 错误:except: 语句?

提前感谢您的建议。

【问题讨论】:

  • 您使用的是哪个库?据我从文档中得知,@variable 语法不是内置 Python sqlite3 库的一部分
  • 我正在使用 sqlite3 "import sqlite3 as sql" 。我已经将 SQLite 与 C# 一起使用,所以我认为这会起作用,也许有更好的方法?我用相同样式编写的插入和删除函数已经工作了。

标签: python sqlite sql-update


【解决方案1】:

我无意中找到了答案:)

sql_values 数组需要与语句中的@variables 的顺序相同。

我在 UPDATE 语句的末尾有 id=@record_id 但在数组中排在第一位。

Python 会像老式字符串格式一样按顺序匹配变量,而不是寻找 @variable 并匹配数组中的相同变量。

错误:

sql_cmd = "UPDATE netdevices SET ip_address = @ip_address, device_name = @device_name, connection_type = @connection_type, username = @username, password = @password WHERE id=@record_id"
sql_values = [record_id, ip_address, device_name, connection_type, username, password,]

正确:

sql_cmd = "UPDATE netdevices SET ip_address = @ip_address, device_name = @device_name, connection_type = @connection_type, username = @username, password = @password WHERE id=@record_id"
sql_values = [ip_address, device_name, connection_type, username, password, record_id]

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多