【问题标题】:'NoneType' has not attribute (using pyodbc/sql connection)'NoneType' 没有属性(使用 pyodbc/sql 连接)
【发布时间】:2020-12-30 20:18:24
【问题描述】:

想知道为什么 Python 使用下面的代码返回 'NoneType' object has no attribute 'connection'。我相信我已经在类中正确创建了 self.connection 变量,但是尝试使用实例调用它会返回上述错误。在我检索到connection 属性之前,连接是否以某种方式终止?

import pyodbc

class sql:
    
    def __init__(self):
        
        self.driver = "{ODBC Driver 17 for SQL Server}"
        self.server = ".\SQLEXPRESS"
        self.database = "lotto"
        self.trusted_connection = "YES"
        self.mars_connection = "YES"

    def sql_conn(self):
        
        """Connect to local SQL Server"""
        
        print('\nConnecting to SQL Server...')
    
        self.connection = pyodbc.connect(
            'DRIVER=' + self.driver
            + ';SERVER=' + self.server
            + ';DATABASE=' + self.database
            + ';Trusted_Connection=' + self.trusted_connection
            + ';MARS_CONNECTION=' + self.mars_connection
        )

        print(self.connection)
        self.cursor = self.connection.cursor()
        
        print('\nConnection to SQL Server established.')

sql_instance = sql()
conn = sql_instance.sql_conn().connection

【问题讨论】:

    标签: python sql pyodbc nonetype


    【解决方案1】:

    sql_conn() 没有明确地return 任何东西,所以它隐式返回None

    在不改变方法的情况下解决此问题的一种方法是将最后一行分成两行 - 一行用于初始化连接,另一行用于检索它:

    sql_instance = sql()
    sql_instance.sql_conn()
    conn = sql_instance.connection
    

    【讨论】:

    • 这样就行了。你介意解释一下为什么在我的尝试没有的情况下拆分最后两行吗?
    • sql_conn 返回None
    • @erik7970 sql_conn() 返回None,这会导致您看到的错误。在这里,我调用sql_conn()(但忽略它的返回值),并从sql_instance 而不是从sql_conn() 的结果中获取.connection
    猜你喜欢
    • 2021-06-15
    • 2016-05-08
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多