Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for context managers with Connection object #851

Closed
jaeger-2601 opened this issue May 21, 2023 · 9 comments
Closed

Support for context managers with Connection object #851

jaeger-2601 opened this issue May 21, 2023 · 9 comments

Comments

@jaeger-2601
Copy link

Is your feature request related to a problem? Please describe.
When working with IO, It is common to acquire some resource i.e open('file.txt') or ibm_db_dbi.connect(connection_str). These resources also have to manually closed i.e fp.close() or connection.close(). Developers may forget to clean up this resources and this could lead to resource leaks. Python solves this problem with context managers which automatically solve the problem of resource management and ensure proper cleanup. They provide a convenient and reliable way to allocate and release resources, such as connecting and disconnecting from a database.

Context managers could provide a concise and intuitive way to handle database connections and transactions, ensuring proper cleanup and reducing the risk of resource leaks. With context managers, developers can write cleaner and more readable code by encapsulating the database-related operations within a well-defined scope. Additionally, context managers can also enable automatic rollback of transactions in case of exceptions, ensuring data consistency and integrity.

Describe the solution you'd like
Context managers to be added to connection objects such that they can be used easily like:

with ibm_db_dbi.connect(connection_str) as connection:
    cursor = connection.cursor()
    cursor.execute('SELECT * from table')
    result = cursor.fetchall()

This removes the need for manual cleanup of resources

Describe alternatives you've considered

Additional context

@jaeger-2601
Copy link
Author

jaeger-2601 commented May 30, 2023

@bimalkjha @amukherjee28 Can I get any comments on if this feature is possible and will be added or not? Thanks

@bimalkjha
Copy link
Member

@Earammak is working on it and she should share update here. Thanks.

@kuwv
Copy link

kuwv commented Feb 1, 2024

class DB2Connect:
    """Context manager to handle connections to DB2."""

    __cxn: Optional['IBM_DBConnection']

    def __init__(self, dsn: str) -> None:
        """Instantiate a DB2 connection."""
        self.__dsn = dsn
        self.__cxn = None

    def __enter__(self) -> 'IBM_DBConnection':
        """Connect to DB2."""
        self.__cxn = ibm_db.connect(self.__dsn, '', '')
        return self.__cxn

    def __exit__(self, exc_type, exc_val, exc_tb) -> None:
        """Disconnect from DB2."""
        ibm_db.close(self.__cxn)

@bimalkjha
Copy link
Member

@jaeger-2601 Please review PR #941 . Thanks.

@jaeger-2601
Copy link
Author

@bimalkjha Left some comments on the PR

@Earammak
Copy link
Collaborator

@jaeger-2601, Can you please check for #947 PR.

@jaeger-2601
Copy link
Author

jaeger-2601 commented Jun 29, 2024

@bimalkjha @Earammak left comments. None of original comments seem to be resolved?

@Earammak
Copy link
Collaborator

Earammak commented Jul 3, 2024

@jaeger-2601, On top of your comment, i have replied also. The one you commented was closed. Please refer to new PR and review the same.
Thanks

@Earammak
Copy link
Collaborator

Fix for this given as part of #947. Closing the issue now. Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants