0
my関数の結果は、常に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()
入力いただきありがとうございますが、これは機能しません - 私は値を選択することはできません、それは列でなければなりません。 – brddawg
本当ですか?この[rextester demo](http://rextester.com/ZXV86001)を見ると、SQL Serverで 'FROM'を使わないでスカラー値で' NOT EXISTS'を使うことができます。デモでは、 'Z'が追加されていますが、' A'は追加されていません。 – Parfait
データベース接続とこのメソッドに問題がありました。これはSQLでは実行されますが、IDEでは実行されません。 – brddawg