osdir.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Single DB connection during class's lifetime. Metaclass, singleton and __new__() examples and references.


I am working on using mysql.connector in a class and have found an example of how to create a single connection that spans the lifetime of all instances of the class:

https://softwareengineering.stackexchange.com/a/358061/317228 

however, I do not understand a few things about the class, including

1. Why it is subclassed as an object: `class Postgres(object):` ? I thought classes were necessarily objects.
2. Why is this portion of code directly addressing the class, instead of using the `cls` reference variable?
connection = Postgres._instance.connection = psycopg2.connect(**db_config)
cursor = Postgres._instance.cursor = connection.cursor()
3. And is it me or does anyone else think {anydb}.connector?s usage is messy and inelegant? Ex:
print('connecting to PostgreSQL database...')
connection = Postgres._instance.connection = psycopg2.connect(**db_config)
cursor = Postgres._instance.cursor = connection.cursor()
cursor.execute('SELECT VERSION()')
db_version = cursor.fetchone()
	Why can?t we associate the focus of the connection with the connection itself, instead of creating a separate cursor object?

Also, within the code example, and in Python in general, why does there needs to be a __new__ constructor when there?s an __init__ constructor? I?ve read about the usage of singletons. It seems you could create singletons within  __init__ or __new__ . Any enlightenment would be really helpful. I am very sleep-deprived, so I?m sorry if this seems like a dumb question.

I have read the official docs. Have also been reading ?Python 3: Patterns, Recipes, and Idioms?. The first was mildly helpful but I still don?t see the benefit of a __new__ constructor.
Why is there dislike for Metaclasses?

Thanks, and I?ll have better incisive questions in the future.

Sent from Mail for Windows 10