【问题标题】:Creating a list of values that are not null创建一个不为空的值列表
【发布时间】:2017-12-03 18:00:20
【问题描述】:

我试图将 SQLite 中的三个值保存在 Python 列表中。所有值都来自不同的列但在同一行。如果该值为 null 我不想将其添加到列表中。这是我写的代码:

    def create_list(self, chat):
    list = []
    for x in range(1, 3):
        column_name = "list" + str(x)
        value = c.execute("SELECT (?) FROM user WHERE (?) NOTNULL AND id = (?)", (column_name, column_name, chat)).fetchall()
        if value != None:
            list.append(value[0][0])
    print(list)

它不打印列表中的 SQLite 值,而是打印: ['list1', 'list2', 'list3'] (如果表中的值之一为空,则不会打印该值。例如,如果liste3 列中的值为 null 它只打印 ['list1', 'list2']) 我该如何解决这个问题,以便将实际的 SQLite 值保存在列表中?

【问题讨论】:

  • 你能用英文解释你正在解决的问题吗?例如,这是一个聊天网站,您想知道某组用户是否一直在聊天?另外,您的表中还有哪些数据?很抱歉,您选择的变量名很糟糕,因此您对这段代码的意图完全不清楚。
  • 它是一个聊天机器人,用户可以在其中一起创建列表。每个用户可以是三个列表的成员。列表的名称保存在 list1、list2 和 list3 列中。这个函数应该基本上打印出用户是 python 列表中成员的列表的名称,以便机器人能够将名称输出给用户。对不起,我希望它现在变得更好
  • 您不能使用 DBAPI 参数替换将 SQL 标识符粘贴到查询中。您正在执行的第一个查询是SELECT ('list1') FROM user WHERE ('list1') NOTNULL AND id = ('whateverchatis')。参数根据它们的 Python 类型插入,在这种情况下,作为(引用的)字符串。
  • 好吧,有道理。我是 python 的新手,你能告诉我如何将“column_name”转换为可以插入 SQL 语句的数据类型吗?

标签: python sqlite


【解决方案1】:

我遇到了同样的问题。 SQLite 包在获取数据后默认忽略 NULL 值。当它面临 NULL 值时,您需要设置一个打印 'Empty' 或其他内容的条件。类似:

conn = sqlite3.connect("someDataBase.db")
db = conn.cursor()

db.execute('''
    SELECT name, email
    FROM person
    WHERE name = 'some dude'
''')

result = db.fetchone()  

if result is None: #if a value IS NULL
    print 'Empty'
else:
    var = result[0]
    print var

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2016-07-05
    • 2020-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多