当前位置: 首页 > 面试题库 >

如何使用Python检查SQLite中是否存在行?

唐弘厚
2023-03-14
问题内容

我的游标带有查询语句,如下所示:

cursor.execute("select rowid from components where name = ?", (name,))

我想检查组件的存在:名称并返回python变量。我怎么做?


问题答案:

由于names是唯一的,因此与我最初使用的建议相比,我真的更喜欢您(OP的)使用方法fetchone或Alex
Martelli的使用方法。SELECT count(*)``fetchall

fetchall将结果(通常是多行数据)包装在一个列表中。由于names是唯一的,因此fetchall返回列表中只有一个元组的列表(例如,[(rowid,),]或为空列表[]。如果您想知道rowid,则使用fetchall要求您浏览列表和元组以到达rowid

fetchone在这种情况下使用更好,因为您只会得到一行(rowid,)None。要获得rowid(假设有一个),您只需选择元组的第一个元素。

如果您不在乎特定内容,rowid而只是想知道是否有点击,则可以使用Alex Martelli的建议SELECT count(*),该建议将返回(1,)(0,)

这是一些示例代码:

首先,通过一些样板代码来设置玩具方桌:

import sqlite3
connection = sqlite3.connect(':memory:')
cursor=connection.cursor()
cursor.execute('create table components (rowid int,name varchar(50))')    
cursor.execute('insert into components values(?,?)', (1,'foo',))

使用fetchall

for name in ('bar','foo'): 
    cursor.execute("SELECT rowid FROM components WHERE name = ?", (name,))
    data=cursor.fetchall()
    if len(data)==0:
        print('There is no component named %s'%name)
    else:
        print('Component %s found with rowids %s'%(name,','.join(map(str, next(zip(*data))))))

产量:

There is no component named bar
Component foo found with rowids 1

使用fetchone

for name in ('bar','foo'): 
    cursor.execute("SELECT rowid FROM components WHERE name = ?", (name,))
    data=cursor.fetchone()
    if data is None:
        print('There is no component named %s'%name)
    else:
        print('Component %s found with rowid %s'%(name,data[0]))

产量:

There is no component named bar
Component foo found with rowid 1

使用SELECT count(*)

for name in ('bar','foo'): 
    cursor.execute("SELECT count(*) FROM components WHERE name = ?", (name,))
    data=cursor.fetchone()[0]
    if data==0:
        print('There is no component named %s'%name)
    else:
        print('Component %s found in %s row(s)'%(name,data))

产量:

There is no component named bar
Component foo found in 1 row(s)


 类似资料:
  • 我需要检查一列是否存在,如果不存在,请添加它。根据我的研究,sqlite似乎不支持是否应该使用语句和case语句。 以下是我目前掌握的情况: 但我得到了一个错误:接近“ALTER”:语法错误。 有什么想法吗?

  • 问题内容: 我有一个字符串数组,在插入它们之前需要检查表中是否存在这些字符串,以避免重复。什么是SQL查询,如何替换以下值?:) 我的产品型号: 表格名称: product_pics 数据库名称: product_db 我了解此声明将起作用: 如何正确格式化此格式,以使该方法在产品存在或不存在时返回? 问题答案: 只是喜欢

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性:

  • 问题内容: 我有一列包含数字和其他字符串值(例如“?”,“ ???”等) 是否可以在SQLite的where子句中添加“ is number”条件?就像是: 问题答案: 从文档中, typeof(X)函数返回一个字符串,该字符串指示表达式X的数据类型:“ null”,“ integer”,“ real”,“ text”或“ blob”。 您可以使用

  • 问题内容: 我需要帮助检查数据库中是否存在行。就我而言,该行包含一个电子邮件地址。我得到结果: 这是我当前正在使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的情况下,检查MySQL中是否存在电子邮件)? 问题答案: 以下是经过尝试,测试和证明的检查行是否存在的方法。 (其中一些我自己使用,或者过去使用过)。 编辑: 我在使用两次的语法中犯了一个先前的错误。请查阅修订版本。 即:

  • 我需要帮助检查数据库中是否存在行。在我的例子中,该行包含一个电子邮件地址。我得到的结果是: 这是我目前使用的代码: 有没有更好的方法来检查MySQL中是否存在行(在我的例子中,检查MySQL中是否存在电子邮件)?