Module xelo2.database.open_db
Expand source code
"""
"""
from logging import getLogger
from getpass import getpass
from PyQt5.QtSql import (
QSqlDatabase,
)
from .tables import parse_all_tables, parse_subtables, LEVELS, EXPECTED_TABLES
lg = getLogger(__name__)
def access_database(db_name, username, hostname='localhost', password=None):
if password is None:
password = getpass(f'Enter Password for user `{username}` to `{db_name}` (hostname: `{hostname}`):')
db = open_database(db_name, username=username, password=password, hostname=hostname, connectionName='xelo2_database')
info_schema = open_database('information_schema', username=username, password=password, hostname=hostname, connectionName='info')
all_tables = parse_all_tables(info_schema, db)
subtables = []
for table in LEVELS:
subtables.extend(parse_subtables(info_schema, db, table))
expected_tables = EXPECTED_TABLES + [x['subtable'] for x in subtables]
remaining_tables = set(all_tables) - set(expected_tables)
if len(remaining_tables) > 0:
lg.warning('These tables were not parsed by python API: ' + ', '.join(remaining_tables))
out = {
'db': db,
'info': info_schema,
'tables': all_tables,
'subtables': subtables,
}
return out
def open_database(db_name, username=None, password=None, hostname=None, connectionName='xelo2_database'):
"""Open the default database using Qt framework
Parameters
----------
db_name : str
database name (QMYSQL)
username : str
user name to open database
password : str
password to open database
Returns
-------
QSqlDatabase
default database
"""
db = QSqlDatabase.addDatabase('QMYSQL', connectionName)
assert db.isValid()
db.setHostName(hostname)
db.setUserName(username)
if password is not None:
db.setPassword(password)
db.setDatabaseName(str(db_name))
db.open()
if not db.isOpen():
raise ValueError('Could not open database')
return db
def close_database(db):
db['db'].close()
QSqlDatabase.removeDatabase(db['db'].connectionName())
db['info'].close()
QSqlDatabase.removeDatabase(db['info'].connectionName())
Functions
def access_database(db_name, username, hostname='localhost', password=None)
-
Expand source code
def access_database(db_name, username, hostname='localhost', password=None): if password is None: password = getpass(f'Enter Password for user `{username}` to `{db_name}` (hostname: `{hostname}`):') db = open_database(db_name, username=username, password=password, hostname=hostname, connectionName='xelo2_database') info_schema = open_database('information_schema', username=username, password=password, hostname=hostname, connectionName='info') all_tables = parse_all_tables(info_schema, db) subtables = [] for table in LEVELS: subtables.extend(parse_subtables(info_schema, db, table)) expected_tables = EXPECTED_TABLES + [x['subtable'] for x in subtables] remaining_tables = set(all_tables) - set(expected_tables) if len(remaining_tables) > 0: lg.warning('These tables were not parsed by python API: ' + ', '.join(remaining_tables)) out = { 'db': db, 'info': info_schema, 'tables': all_tables, 'subtables': subtables, } return out
def close_database(db)
-
Expand source code
def close_database(db): db['db'].close() QSqlDatabase.removeDatabase(db['db'].connectionName()) db['info'].close() QSqlDatabase.removeDatabase(db['info'].connectionName())
def open_database(db_name, username=None, password=None, hostname=None, connectionName='xelo2_database')
-
Open the default database using Qt framework
Parameters
db_name
:str
- database name (QMYSQL)
username
:str
- user name to open database
password
:str
- password to open database
Returns
QSqlDatabase
- default database
Expand source code
def open_database(db_name, username=None, password=None, hostname=None, connectionName='xelo2_database'): """Open the default database using Qt framework Parameters ---------- db_name : str database name (QMYSQL) username : str user name to open database password : str password to open database Returns ------- QSqlDatabase default database """ db = QSqlDatabase.addDatabase('QMYSQL', connectionName) assert db.isValid() db.setHostName(hostname) db.setUserName(username) if password is not None: db.setPassword(password) db.setDatabaseName(str(db_name)) db.open() if not db.isOpen(): raise ValueError('Could not open database') return db