【问题标题】:Setting variable equal to sqlite3+Python database entry设置变量等于 sqlite3+Python 数据库条目
【发布时间】:2020-10-19 13:34:36
【问题描述】:

我有一个名为打印机的表,其中包含以下列:id、printer_name、printer_status(指 3D 打印机)。我正在尝试检索特定打印机的状态(“忙碌”或“就绪”),然后将用于检查该打印机是否可用于打印项目。我遇到的问题是我不知道该怎么做哈哈。

当它运行时,输出是'',有没有办法让它成为该表格单元格中的实际文本值。我希望 print(status) 输出“忙碌”或“就绪”。

希望这是有道理的。如果您需要任何其他信息,请询问,我是编程新手,所以我不确定我是否提供了足够的信息。

def check_printer_status():
     id = input("Enter an id: )
     status = str(c.execute("SELECT printer_status FROM printer WHERE id =(?)",(id,)))
     print(status)
     if status == 'Ready':
         print_job.execute_print_job(id) #Set print_job_status = in-progress. Print_job is a different table
     if status == 'Busy'
         print_job.execute_print_job_pending(id) #Set print_job_status = pending
     

【问题讨论】:

    标签: python sql database sqlite


    【解决方案1】:

    您的主要问题是您试图打印光标对象。 sqlite3 游标对象有两种返回查询结果的方法:fetchall()fetchone()。在尝试测试您的代码时,我注意到您在 id = input("Enter an id: ) 上缺少引号。

    由于您只从查询中返回一行,请使用c.fetchone()(我假设'c' 是您的conn.cursor())。这将为您提供一个包含一个元素的列表,因此请使用索引 0 [0] 获取第一个元素。

    import sqlite3
    conn = sqlite3.connect('test123.db')
    c = conn.cursor()
    
    def check_printer_status():
        id = input("Enter an id: ")
        c.execute("SELECT printer_status FROM printer WHERE id = ?", [id])
        status = c.fetchone()[0]
        print(status)
        if status == 'Ready':
            print_job.execute_print_job(id) #Set print_job_status = in-progress. Print_job is a different table
        elif status == 'Busy':
            print_job.execute_print_job_pending(id) #Set print_job_status = pending
    
    check_printer_status()
    

    【讨论】:

    【解决方案2】:

    通常你必须在选择后获取数据:

    def check_printer_status():
         id = input("Enter an id:" )
         query = c.execute("SELECT printer_status FROM printer WHERE id =(?)",(id,))
         status=query.fetchall()
         print(status)
         if status == 'Ready':
             print_job.execute_print_job(id) #Set print_job_status = in-progress. Print_job is a different table
         if status == 'Busy'
             print_job.execute_print_job_pending(id) #Set print_job_status = pending
    

    【讨论】:

      【解决方案3】:

      假设查询返回一条记录,您应该使用 fetchone() 来获取状态。
      请参阅here 了解更多信息。

      def check_printer_status():
           id = input("Enter an id:" )
           query = c.execute("SELECT printer_status FROM printer WHERE id =(?)",(id,))
           status = query.fetchone()[0]
           if status == 'Ready':
               print_job.execute_print_job(id)
           if status == 'Busy':
               print_job.execute_print_job_pending(id)
      

      【讨论】:

      • @jrmanning 我很高兴能提供帮助。随意投票。
      • 我试图投票,但不幸的是我太新了,我的声誉太低了。一旦我能够,我会:)。再次感谢
      猜你喜欢
      • 2013-08-02
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 2011-12-28
      • 2016-02-21
      • 2018-03-21
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多