could you advise me on best practices on how to deal with MySQL class in Python application?
class DBClient:
def __init__(self, db_name=None):
self.conn = None
self.db_name = db_name
self.__create_connection()
def __create_connection(self):
try:
self.conn = mysql.connector.connect(
host="127.0.0.1",
port=3306,
user="root",
password="password",
database=self.db_name
)
print('DB Connection successful')
except InterfaceError as e:
exit(e)
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
def __del__(self):
if self.conn:
self.conn.close()
def __commit(self):
self.conn.commit()
DBClient(config.DB_NAME).create_items_table()
in general the problem is:
- as you noticed the method
__create_connestion
specified to which database we would like to connect. The problem is if the the database is not created. How to avoid code duplication in that scenario:
- connect to DB
- if db is not created -> create that
- if db is created -> connect
2
Answers
so if I understand correctly it is better to have sth like this in main:
and have separate script, lets say
setup_db.py
which is going to create a database and schema?It is not a good idea to create a database automatically, it is an action that is better to do yourself.
Never put credentials in code, use environment variables instead, please have a look at this module
Dotenv