我目前有许多连接到同一个MSSQL数据库的脚本。我在每个脚本中建立连接,但为了便于使用,我想将连接放在一个模块中并从我的脚本中调用该模块。我的模块connect_to_db.pyc中的代码如下所示:
import pyodbc
def sql_connect():
server="some_server.net"
port="1433"
user = "my_username@my_domain"
server="my_server"
database="my_database"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=my_server,1433',
user=user,
password=password,
database=database)
c=conn.cursor()
然后,在我的脚本中,我尝试调用此模块并运行查询:
from connect_to_db import sql_connect
sql_connect()
c.execute("SELECT * FROM table")
我收到名称c未定义的错误。我试图把它定义为一个全球性的,但它没有帮助。它必须与我缺乏理解模块有关,但我无法弄清楚是什么。
答案 0 :(得分:1)
您可以在sql_connect函数中返回光标
import pyodbc
def sql_connect():
server="some_server.net"
port="1433"
user = "my_username@my_domain"
server="my_server"
database="my_database"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=my_server,1433',
user=user,
password=password,
database=database)
return conn.cursor()
然后你可以用它作为
来自connect_to_db import sql_connect
c = sql_connect()
c.execute("SELECT * FROM table")
答案 1 :(得分:0)
你确实错过了一点:
在函数sql_connect
中,指定一个名为c
的本地变量。
该变量在您的函数之外不存在。 如果您希望模块级别存在连接变量,可以尝试以下尝试:
在你的" connect_to_db.py":
import pyodbc
def sql_connect():
server="some_server.net"
port="1433"
user = "my_username@my_domain"
server="my_server"
database="my_database"
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=my_server,1433',
user=user,
password=password,
database=database)
return conn.cursor()
cursor = sql_connect()
这会创建一个varibale"光标"在模块的层面上。 在另一个模块中,只需执行
即可from connect_to_db import cursor
导入模块"光标"构件。
这应该可以解决问题。
提示:请注意,在软件工程方面,这种方法可能不是很优雅。
修改
也许,你可能想深入研究面向对象的编程?
class MSSQLConnector(object):
def __init__(self, server, port, database, user, password):
self.server = server
self.port = port
self.conn = pyodbc.connect('DRIVER={SQL Server};SERVER='{0},
{1}.format((self.server, self.port)), user, password, database)
def open_cursor(self):
return self.conn.cursor()
将以这种方式使用:
connector = MSSQLConnector("my_server", "1433", "my_database", "username", "secret-password")
cursor = connector.open_cursor()