如何使用函数连接Pyodbc?
How to connect with Pyodbc with function?
我遇到了一个问题,即在使用函数启动程序时无法连接到数据库。如果我不使用函数启动它,它就可以正常工作。
我的程序从 serverlist.txt 中获取一个计算机名称并在数据库中查找它。然后它给了我那台计算机的 "Location ID"。
此版本有效:
import os
import shutil
import fileinput
import pypyodbc
def replaceid(servername):
try:
cursor = connection.cursor()
SQLCommand = ("SELECT Name, Location_ID "
"FROM dbo.I_Location " # table name
"with (nolock)"
"WHERE Name = ?")
Values = [servername]
cursor.execute(SQLCommand,Values)
results = cursor.fetchone()
if results:
print (" Name: " + results[0] + " Location ID: " + str(results[1]))
print (" ")
else:
print (" Location ID for " + servername + " does not exist.")
print (" ")
connection.close()
except:
print("Database is down or you are not connected to network.")
exit()
def grab(servername):
# copy config from remote computer
source = r'//' + servername + '/c$/Administrator/'
dest = "."
file = "Admin.config"
if os.path.isfile(os.path.join(source, file))
try:
shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))
except:
print (" Local directory you are copying to does not exist.")
else:
pass
replaceid(servername)
os.system('cls' if os.name == 'nt' else 'clear')
array = []
with open("serverlist.txt", "r") as f:
for servername in f:
try:
connection = pypyodbc.connect('Driver={SQL Server};Server=mydbx;Database=WinOasis;Trusted_Connection=yes;')
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
print ("You do not have access.")
grab(servername.strip())
当我在底部添加start() 函数时,它不起作用。它移动到说的例外
数据库已关闭或您未连接到网络。
import os
import shutil
import fileinput
import pypyodbc
def replaceid(servername):
try:
cursor = connection.cursor()
SQLCommand = ("SELECT Name, Location_ID "
"FROM dbo.I_Location " # table name
"with (nolock)"
"WHERE Name = ?")
Values = [servername]
cursor.execute(SQLCommand,Values)
results = cursor.fetchone()
if results:
print (" Name: " + results[0] + " Location ID: " + str(results[1]))
print (" ")
else:
print (" Location ID for " + servername + " does not exist.")
print (" ")
connection.close()
except:
print("Database is down or you are not connected to network.")
exit()
def grab(servername):
# copy config from remote computer
source = r'//' + servername + '/c$/Administrator/'
dest = "."
file = "Admin.config"
if os.path.isfile(os.path.join(source, file))
try:
shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))
except:
print (" Local directory you are copying to does not exist.")
else:
pass
replaceid(servername)
def start():
# Option 1
os.system('cls' if os.name == 'nt' else 'clear')
array = []
with open("serverlist.txt", "r") as f:
for servername in f:
try:
connection = pypyodbc.connect('Driver={SQL Server};Server=mydbx;Database=WinOasis;Trusted_Connection=yes;')
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
print ("You do not have access.")
grab(servername.strip())
start()
关于造成这种情况的原因有什么想法吗?
当你把connection放在start函数中时,它变成了一个本地对象,其他函数无法获取连接!!!
如果它们使用相同的连接,则必须将连接作为对象传递给每个函数!!!
grab(servername.strip(),connection)
def grab(servername ,connection):
def replaceid(servername,connection):
这样改应该没问题(把grab函数放在try部分)
我遇到了一个问题,即在使用函数启动程序时无法连接到数据库。如果我不使用函数启动它,它就可以正常工作。 我的程序从 serverlist.txt 中获取一个计算机名称并在数据库中查找它。然后它给了我那台计算机的 "Location ID"。
此版本有效:
import os
import shutil
import fileinput
import pypyodbc
def replaceid(servername):
try:
cursor = connection.cursor()
SQLCommand = ("SELECT Name, Location_ID "
"FROM dbo.I_Location " # table name
"with (nolock)"
"WHERE Name = ?")
Values = [servername]
cursor.execute(SQLCommand,Values)
results = cursor.fetchone()
if results:
print (" Name: " + results[0] + " Location ID: " + str(results[1]))
print (" ")
else:
print (" Location ID for " + servername + " does not exist.")
print (" ")
connection.close()
except:
print("Database is down or you are not connected to network.")
exit()
def grab(servername):
# copy config from remote computer
source = r'//' + servername + '/c$/Administrator/'
dest = "."
file = "Admin.config"
if os.path.isfile(os.path.join(source, file))
try:
shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))
except:
print (" Local directory you are copying to does not exist.")
else:
pass
replaceid(servername)
os.system('cls' if os.name == 'nt' else 'clear')
array = []
with open("serverlist.txt", "r") as f:
for servername in f:
try:
connection = pypyodbc.connect('Driver={SQL Server};Server=mydbx;Database=WinOasis;Trusted_Connection=yes;')
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
print ("You do not have access.")
grab(servername.strip())
当我在底部添加start() 函数时,它不起作用。它移动到说的例外 数据库已关闭或您未连接到网络。
import os
import shutil
import fileinput
import pypyodbc
def replaceid(servername):
try:
cursor = connection.cursor()
SQLCommand = ("SELECT Name, Location_ID "
"FROM dbo.I_Location " # table name
"with (nolock)"
"WHERE Name = ?")
Values = [servername]
cursor.execute(SQLCommand,Values)
results = cursor.fetchone()
if results:
print (" Name: " + results[0] + " Location ID: " + str(results[1]))
print (" ")
else:
print (" Location ID for " + servername + " does not exist.")
print (" ")
connection.close()
except:
print("Database is down or you are not connected to network.")
exit()
def grab(servername):
# copy config from remote computer
source = r'//' + servername + '/c$/Administrator/'
dest = "."
file = "Admin.config"
if os.path.isfile(os.path.join(source, file))
try:
shutil.copyfile(os.path.join(source, file), os.path.join(dest, file))
except:
print (" Local directory you are copying to does not exist.")
else:
pass
replaceid(servername)
def start():
# Option 1
os.system('cls' if os.name == 'nt' else 'clear')
array = []
with open("serverlist.txt", "r") as f:
for servername in f:
try:
connection = pypyodbc.connect('Driver={SQL Server};Server=mydbx;Database=WinOasis;Trusted_Connection=yes;')
except pypyodbc.Error as ex:
sqlstate = ex.args[0]
if sqlstate == '28000':
print ("You do not have access.")
grab(servername.strip())
start()
关于造成这种情况的原因有什么想法吗?
当你把connection放在start函数中时,它变成了一个本地对象,其他函数无法获取连接!!!
如果它们使用相同的连接,则必须将连接作为对象传递给每个函数!!!
grab(servername.strip(),connection)
def grab(servername ,connection):
def replaceid(servername,connection):
这样改应该没问题(把grab函数放在try部分)