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驱动程序,相同的结构也可以正常工作。
答案 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(...)
,现在它适用于我到目前为止使用的所有驱动程序。