Comments (6)
The connection object seems to be returned. 🤔
https://github.com/laughingman7743/PyAthena/blob/master/pyathena/__init__.py#L54
Please show the source code when the cursor object is returned.
from pyathena.
Yes, I was also working on the assumption that Connection is returned. The following are the relevant excerpts from within the code (the get_conn method is within a Connection Manager class):
from pyathena import connect as athena_connect
def get_conn(self, database_name, creds_key):
return athena_connect(
aws_access_key_id=self.passwords[creds_key]['un'],
aws_secret_access_key=self.passwords[creds_key]['pw'] if not self.decrypt_key else
decrypt(self.decrypt_key, self.passwords[creds_key]['pw']).decode("utf-8"),
s3_staging_dir=athena_us_east_1[database_name],
region_name='us-east-1'
)
and the excerpts of calling code which is throwing an error:
with connection_manager_instance.get_conn(db_name, key) as athena_conn:
self.src_cursor = athena_conn.cursor()
error thrown is basically that Cursor object has no method cursor()
Do note, that I'm using all of this within a larger class which also utilizes another DB API 2.0 compliant package (pyhive.presto) which returns connection class when the same above format is used. I suspect the issue might be within your
connection.py __enter__()
since there you return the cursor and not the connection; thus, unexpected behaviour when used in a 'with -- as' block.
from pyathena.
Oh, the context manager will certainly return a cursor object.
https://github.com/laughingman7743/PyAthena/blob/master/pyathena/connection.py#L82
PyMySQL and mysqlclient-python return a cursor object.
https://github.com/PyMySQL/PyMySQL/blob/master/pymysql/connections.py#L497
https://github.com/PyMySQL/mysqlclient-python/blob/master/MySQLdb/connections.py#L284
Which one of a cursor object and a connection object should be returned? It seems that the specification of the context manager is not written in PEP 249. 🤔
from pyathena.
Interesting; I've been using psycopg2 within context extensively, as it helps maintain clean connection lifecycles; however it does require that connection object, so that the commits/rollbacks can get called on the connection. True, this use-case may not be applicable with Athena connections, however.
Food for thought. Receiving a cursor instead of a connection when a call to connect() is made seems counter-intuitive. I would propose at the very least adding that usage example in the documentation, to clarify that distinction: when calling connect() in context you receive the cursor object back, but without the context, you must explicitly call Connection.cursor();
from pyathena.
I think that returning a connection object is simpler and easier to understand.
I will fix it on the weekend. 😆
Thanks,
from pyathena.
I fixed it. Please check the pull requests #43 .
from pyathena.
Related Issues (20)
- Add custom filesystem object to arrow engine HOT 2
- Compatibility issue with SQLAlchemy<1.4 HOT 2
- `UUID` in a query gets garbled HOT 3
- Add support for Spark calculations HOT 8
- Add Endpoint_URL param to SQLAlchemy HOT 2
- SQLAlchemy dialect uses deprecated dbapi() method HOT 1
- Create documents in Sphinx and publish them on GitHub Pages HOT 1
- Breaking change in the release between 3.0.10 and 3.1.0 HOT 6
- Okta authentication support HOT 1
- Integer variant types incorrectly rendered in DDL HOT 5
- Support for Iceberg FOR SYSTEM_VERSION AS OF HOT 7
- AWS Error NETWORK_CONNECTION during HeadObject operation: curlCode: 28, Timeout was reached HOT 2
- FutureWarning: Setting an item of incompatible dtype is deprecated and will raise in a future error of pandas.
- Latest PyAthena no longer compatible with SQLAlchemy 1.4
- [Warning] SADeprecationWarning: The dbapi() classmethod on dialect classes has been renamed to import_dbapi(). HOT 1
- pyathena.error.DatabaseError: An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: line 1:3242: mismatched input 'OFFSET'. Expecting: <EOF> HOT 2
- If a value for a partition key is None, to_sql doesn't warn you and no data is written
- GENERIC_INTERNAL_ERROR: io.trino.hdfs.s3.TrinoS3FileSystem$UnrecoverableS3OperationException HOT 1
- URLLIB3 / Requests HOT 4
- Formatter does not escape single quotes when operation is MERGE or UPDATE HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pyathena.