为什么我的连接对象突然成为主对象中的光标对象?

时间:2018-07-20 12:02:45

标签: python python-3.x pymysql

PyMySQL == 0.9.2 python 3.6.4 我将代码简化了一些,它应该可以在许多sql数据库上运行。我目前的奋斗是与pymysql和mysql。 主要: $> cat testje.py

#!/usr/bin/env python
import pymysql as dbdr
from dbconnections import mysql as dbc

with dbc.connect(dbdr) as conn:
    print(conn)

$> cat dbconnections / mysql.py

def connect(db):
    dbc = db.connect(host='127.0.0.1', user='cistats', password='bloemkool',
                      db='mysql', port=int(3306)
                    #  cursorclass=pymysql.cursors.DictCursor
                    )
    print(dbc)
    return dbc

输出: $> ./ testje.py

<pymysql.connections.Connection object at 0x10a72e5c0>
<pymysql.cursors.Cursor object at 0x10b16cfd0>

它表明在connect函数中dbc是一个Connection对象。 为什么它会神奇地作为游标对象出现在main中? 我怎样才能解决这个问题?总的来说,我真的很期待一个Connection对象。

对于cx_Oracle,psycopg2和pytds驱动程序,相同的结构也可以正常工作。

1 个答案:

答案 0 :(得分:0)

正如Ignacio Vazquez-Abrams提到的,原因是当使用with时,connect()。 enter ()被调用。这与其他驱动程序相同,但其他驱动程序仅具有:

def __enter__(self):
            return self

和pymysql有:

def __enter__(self):
    """Context manager that returns a Cursor"""
    return self.cursor()

因此,我将代码更改为简单的conn = dbc.connect(...),现在它适用于我到目前为止使用的所有驱动程序。