【问题标题】:Python and MySQL - Weak Reference Error when Executing QueryPython 和 MySQL - 执行查询时出现弱引用错误
【发布时间】:2020-07-05 01:17:04
【问题描述】:

我是 Python 和 MySQL 的新手,我在使用用于执行查询的连接类时遇到了一些问题。

这是我目前所拥有的:

class DbConnection:

    def __init__(self):
            db = mysql.connector.connect(
            host=cfg.mysql["host"], 
            user=cfg.mysql["user"], 
            passwd=cfg.mysql["passwd"], 
            database=cfg.mysql["database"]
            )
            self.cursor = db.cursor()
            
    def query(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchall()
    
test = DbConnection()



test.query('SELECT * FROM DaycareDogs')

当我尝试运行此(或任何查询)时,我收到“ReferenceError:弱引用对象不再存在”。

我对编码很陌生,这是我的第一个真正的项目,所以我正在学习。

我有什么遗漏吗?我已经看到了一些其他类似的问题,并按照建议做了,但仍然没有运气。

有什么建议吗?

谢谢!

【问题讨论】:

    标签: python mysql database-connection


    【解决方案1】:

    尝试使数据库连接成为类的属性,同时在它前面添加 self

    class DbConnection:
    
    def __init__(self):
            self.db = mysql.connector.connect(
            host=cfg.mysql["host"], 
            user=cfg.mysql["user"], 
            passwd=cfg.mysql["passwd"], 
            database=cfg.mysql["database"]
            )
            self.cursor = self.db.cursor()
            
    def query(self, sql):
        self.cursor.execute(sql)
        return self.cursor.fetchall()
    
    test = DbConnection()
    
    test.query('SELECT * FROM DaycareDogs')
    

    由于变量db在本地范围内,当'init'构造函数结束时,变量将被销毁,因此连接

    【讨论】:

    • 这似乎让我摆脱了我遇到的错误!由于某种原因,结果没有像我想象的那样显示。这不是 return self.cursor.fetchall() 的用途吗?
    • 我确实将 Query 函数修改为: def query(self, sql): self.cursor.execute(sql) for x in self.cursor: print(x) 这让我看到结果。有没有更好的办法?但是您最初的解决方案让我能够纠正这个问题!
    • @placebo398 return 将一个值从函数返回到调用代码。您可能想将它分配给一个变量以对其进行处理,例如result = test.query('Select [...]); print(result)
    猜你喜欢
    • 2020-07-30
    • 1970-01-01
    • 2016-11-11
    • 1970-01-01
    • 2012-02-22
    • 2012-11-04
    • 2017-07-11
    • 2017-02-11
    • 2021-02-19
    相关资源
    最近更新 更多