私は 'serverlist.txt'の名前のリストを通って走るプログラムを持っています。 ユーザーは、オプション1またはオプション2を選択して、検索するデータベースを選択します。 プログラムはリスト内のすべての名前を実行し、各名前に関連付けられたIDを提供します。whileループを正しく終了させるには?
名:木星ID:23 名:火星ID:26 名:マーキュリーID:27
これは正常に動作しますが、それは停止しません。リストが完了すると、すべてのものが再びループします。
リストを複数回通過しないようにするにはどうすればよいですか?
import pypyodbc
import os
def replaceid(connection, servername):
try:
cursor = connection.cursor()
SQLCommand = ("SELECT Name, Location_ID "
"FROM dbo.Server_ID " # table name
"with (nolock)"
"WHERE Name = ?")
Values = [servername]
cursor.execute(SQLCommand,Values)
results = cursor.fetchone()
if results:
print (" Name: " + results[0] + " ID: " + str(results[1]))
print (" ")
locationid(results, connection, servername)
else:
print (" ID for " + servername + " does not exist.")
print (" ")
connection.close()
except:
print("Database is down or you are not connected to network.")
exit()
def start1():
os.system('cls' if os.name == 'nt' else 'clear')
array = []
local = input('\n\n Type option 1 or 2: ')
while True:
with open("serverlist.txt", "r") as f:
for servername in f:
try:
if local in ['1']:
connection = pypyodbc.connect('Driver={SQL Server};Server=db1;Database=WinOasis;Trusted_Connection=yes;')
elif local in ['2']:
connection = pypyodbc.connect('Driver={SQL Server};Server=db2;Database=WinOasis;Trusted_Connection=yes;')
else:
return
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
print ("You do not have access.")
replaceid(connection, servername.strip())
return
start1()
'grab'と' replaceid'関数はどこで使われていますか? – Cuber
申し訳ありませんが、訂正しました。私がここに貼り付けるプログラムを短くしていたとき、その言葉の一つが混ざってしまった。 – Prox
コードを一度しか実行しない場合は、なぜループを使用するのですか? – Blckknght