变量在if语句python中返回空

时间:2015-12-28 11:55:03

标签: python mysql if-statement sql-insert connector

ul.main_nav li:hover ul.sub-menu {
 display: block;
 position: absolute;
 padding: 0px;
 margin-left: -20px;
 top:0;
 left:0;
 width:800px;
}

由于某种原因,在我的if语句中,我的标题变量在被调用时仍会返回空,如果不是行:

如果列中不存在变量剂量,我试图插入变量。

1 个答案:

答案 0 :(得分:0)

如果没有返回任何行,那么可能是因为表中没有包含请求的firstname的数据。尝试在代码中添加一些调试并使用参数化查询而不是字符串连接:

cursor.execute("SELECT id FROM myguests WHERE firstname = %s", (title,))
row = cursor.fetchall()
print 'Got row: {!r}'.format(row)    # some debugging

if row:
    print "Record for {} already exists".format(title)
else:
    print "List is empty, attempting to insert"
    cursor.execute(title_query, (title,))

但这种方法存在潜在的竞争条件;如果某个其他进程在初始检查和后续插入之间将值添加到数据库,该怎么办?根据您的应用,这可能是也可能不是问题。

关于“如果不存在则插入”,一种方法是在firstname列上设置UNIQUE INDEX。然后只是尝试插入新行而不先检查。如果存在具有firstname相同值的行,则插入将失败。如果不存在这样的行,则将尝试插入(它可能仍然失败,但出于其他原因)。您的代码需要处理因重复键而导致的插入失败。

或者您可以调查使用INSERT IGNORE into myguests ...或此处讨论的其他一些选项:How to 'insert if not exists' in MySQL?

但你确定firstname应该是唯一的吗?在我看来,许多客人可能拥有相同的名字。