检查数据库和添加(如果不可用)的最有效方法

时间:2017-09-19 16:22:10

标签: python sql python-2.7 sql-server-2008

我的函数的结果始终是拥有xID列中的唯一ID。我的名字'列被限制为唯一,并且xID是主要的并且是自动分配的。

这是我目前的职能:

def getid(x):
    cursor.execute('''SELECT xID 
           FROM table
           WHERE Name = '{}';'''
                   .format(x))
    if cursor.rowcount == 0:
        cursor.execute('''INSERT INTO table
                           (Name)
                           VALUES ({0});'''
                       .format(x))
        cursor.commit()
    cursor.execute('''SELECT xID 
           FROM table
           WHERE Name = '{}';'''
                   .format(x))
    return cursor.fetchone()[0]
    cursor.close()

这种结构是可靠的,然而,它似乎没有必要的代表性。有没有更快的方法来实现这个目标?

建议的解决方案:

def getid(x):
    sql = '''INSERT INTO table ([Name])
             SELECT %s
             WHERE NOT EXISTS (SELECT 1 FROM table WHERE [Name] = %s)'''

    cursor.execute(sql, (x,x))

    sql = '''SELECT xID 
               FROM table
               WHERE Name = '%s';'''

    cursor.execute( sql, (x,))

    return cursor.fetchone()[0]
    cursor.close()

1 个答案:

答案 0 :(得分:1)

考虑SQL中的NOT EXISTS子句,并确保使用.format()传入参数而不是字符串插值。

sql = '''INSERT INTO table ([Name])
SELECT %s
WHERE NOT EXISTS (SELECT 1 FROM table WHERE [Name] = %s)'''

cursor.execute(sql, (x,x))