我的函数的结果始终是拥有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()
答案 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))