【问题标题】:Passing mySQL cursor as return type in a python function在 python 函数中将 mySQL 游标作为返回类型传递
【发布时间】:2016-11-11 20:27:01
【问题描述】:

我正在使用标准 mysql.connector 驱动程序从 python 连接到 mysql db。

我定义了下面的函数来创建一个游标对象以执行任何数据库查询/DML

import mysql.connector as msc
    def mem_conn():
            cnx = msc.connect(user='test',password='test',host='mysql.testdb.com', database='test')
            curA = cnx.cursor(buffered=True)
            return curA

我从另一个函数调用以获取光标句柄 (curA),我可以使用该句柄在该函数中运行我的 DML/查询。但是,当我使用此解决方案并给出错误时,我的代码最终会出错

文件“/usr/lib/python2.6/site-packages/mysql/connector/cursor.py”, 第 482 行,执行中 if not self._connection: ReferenceError: 弱引用对象不再存在 [m

但是,如果我使用相同的代码连接到 db 并在相同的函数中使用它,它就可以正常工作。

如果我想在我的程序中的多个位置连接到我的数据库,我在这里做错了什么以及普遍接受的做事方式。交易量很低,但我需要连接到数据库才能在我的代码中的很多地方读/写。

提前致谢!!

【问题讨论】:

标签: python mysql-python


【解决方案1】:

我使用 sqlalchemy 在 python3 中编写了类似的脚本。看看这是否有帮助。

sqlalchemyconnection.py

​​>
#!/usr/bin/env python3

import sqlalchemy


def dbconn(dbname="test"):
    """ Loads login credentials from text file.
        Passes `test` db as default parameter if db name is not passed by calling script.
        Returns connection object back to calling script.
    """
    try:
        login_info = open("dblogin").read()
        login_info = login_info.split()
        hostname = login_info[0]
        username = login_info[1]
        password = login_info[2]

        try:
            engine_str = 'mysql+mysqlconnector://{}:{}@{}/{}'.format(
                username,
                password,
                hostname,
                dbname
            )
            print(engine_str)
            engine = sqlalchemy.create_engine(engine_str, echo=False,
                                              encoding='utf-8')

            connection_obj = engine.connect()

            return connection_obj
        except Exception as e:
            print(e)
    except FileNotFoundError:
        print("dblogin file not found")

test.py

​​>
from sqlalchemyconnection import dbconn


def test():
    conn = dbconn('tesdb')
    print(conn)

test()

输出:打印 conn 的对象。

<sqlalchemy.engine.base.Connection object at 0x000000000401FF98>

【讨论】:

  • 这解决了我的弱引用错误。以前我使用的是 mysql.connector.connect()。
猜你喜欢
  • 2013-08-18
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
相关资源
最近更新 更多