在if语句python中执行curse.execute



我有问题,是否可以在if语句中使用curse.execute生成if语句?我需要得到行上的数字,为此我的代码在下面

cursor.execute("SELECT COUNT(*) from test WHERE email = '{0}'".format(json.dumps(email)))
time_check = cursor.fetchone()[0]

所以我16岁了,还好,但我需要在早上8点前检查一下它将是非常";硬编码";如果我做了很多

cursor.execute("SELECT COUNT(*) from test WHERE time='8:00:00.000' and email = '{0}'".format(json.dumps(email)))
time_check1 = cursor.fetchone()[0]
cursor.execute("SELECT COUNT(*) from test WHERE time='8:30:00.000' and email = '{0}'".format(json.dumps(email)))
time_check2 = cursor.fetchone()[0]

所以,我想把什么放在if语句中,我对如何用curse.execute在if语句cursor.fetchone中执行函数有问题
if语句函数正在检查在什么时候存在的行是否少于两行。我不想做这种

if (time_check1  < 2)
{
} 

我想做这样的

if (cursor.execute("SELECT COUNT(*) from test WHERE time='8:30:00.000' and email = '{0}'".format(json.dumps(email)))< 2)
{
} 

我在烧瓶项目中使用python和this。知道怎么解决吗?或者用别的方法检查一下?

解决问题的一种方法可能是使用函数

def execute_and_fetch_one(cursor, statement):
cursor.execute(statement)
return cursor.fetchone()[0]

然后你可以在if语句中调用它

if (execute_and_fetch_one(cursor, "SELECT COUNT(*) from test WHERE time='8:30:00.000' and email = '{0}'".format(json.dumps(email))) < 2)

无论如何,你通常不应该使用.format来格式化你的SQL查询,因为这很容易导致SQL注入,在线搜索使用的包的替代方法是什么

通常,您不希望在if语句中执行查询。这可能会在以后需要进行故障排除时导致故障。创建一个处理执行的通用函数。您可以创建一个处理execute、fetch_all、fetch_one等的函数。也可以创建多个函数并根据需要处理结果。

根据你的数据库是什么,你可以做这样的事情(以mysql为例(:

伪代码示例(注意DictCursor的使用(:

import pymysql
def fetch_one(sql):
conn = pymysql.connect(host=host, user=user, passwd=password, db=database)
cursor = conn.cursor(pymysql.cursors.DictCursor)
cursor.execute(sql)
ret_ = cursor.fetchone()
cursor.close()
conn.close()
return ret_

然后你可以创建这样一个语句:

sql = "SELECT count(*) as 'count' from [table] where [...]"
ret_ = fetch_one(sql)
print(ret_['count'])

然后你就可以处理结果了。我个人使用DictCursor作为字典处理结果。我发现它更容易处理。尽管还有其他方法。

最新更新