从自制模块

时间:2017-02-28 09:54:14

标签: python sql-server module

我目前有许多连接到同一个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未定义的错误。我试图把它定义为一个全球性的,但它没有帮助。它必须与我缺乏理解模块有关,但我无法弄清楚是什么。

2 个答案:

答案 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()
相关问题