database¶
This sections contains module documentation of database modules.
dbo¶
Module provides class DBO as general database interface.
Supported drivers:
- sqlite - implemented in hydratk
- mssql - implemented in hydratk-lib-network
- mysql - implemented in hydratk-lib-network
- oracle - implemented in hydratk-lib-network
- pgsql - implemented in hydratk-lib-network
Attributes :
- _dbo_driver - reference to DBODriver
- _driver_name - name of database driver
Properties (Getters) :
- driver_name - returns _driver_name
Methods :
- __init__
Method imports and initializes requested DBODriver implemented by different driver modules. It extracts driver name from DSN and raises DBOException when driver is not implemented.
- _import_dbo_driver
Method imports driver module.
- _get_driver_from_dsn
Method extracts driver name from DSN (driver:...).
Class DBOException
Custom exception class with attributes (_error_info, _code, _message, _code, _file, _line).
dbodriver¶
Module provides class DBODriver as abstract class to be extended by each driver.
Attributes :
- _cursor - database cursor
- _dbcon - database connection
- _result_as_dict - bool, return query output in dictionary form
- _dsn - database DSN
- _driver_options - driver configuration
- _username - username
- _password - password
Properties (Getters) :
- dbcon - returns _dbcon
- cursor - returns _cursor
Methods :
- __init__
Method sets driver attributes and connects to database if allowed (parameter autoconnect).
Abstract methods :
Drivers implement some of them.
- connect
- close
- commit
- error_code
- error_info
- qexec
- get_attribute
- in_transaction
- last_insert_id
- prepare
- query
- quote
- rollback
- set_attribute
- table_exists
- database_exists
- remove_database
sqlite¶
Module driver provides class DBODriver which impletements client SQLite database using standard module sqlite3. Unit tests available at hydratk/lib/database/dbo/sqlite/01_methods_ut.jedi
Attributes :
- _mode - FILE or MEMORY
- _dbfile - database file
- _driver_options - configuration dictionary (timeout, factory, ...)
Methods :
- _detect_mode
Method sets _mode according to dsn FILE (contains :) or MEMORY (contains ::).
- _parse_dsn
Method parses dsn (connection string). Sets _db_file.
from hydratk.lib.database.dbo.dbo import DBO dsn = 'sqlite:/var/local/hydratk/test.db3' c = DBO(dsn) res = d._parse_dsn(dsn)
- _apply_driver_options
Method updates driver options.
opt = {'timeout': 10} d._apply_driver_options(opt)
- connect
Method connects to server using sqilite3 method connect. Parameters are already set by method _parse_dsn. When database file not exists the method creates it.
dsn = 'sqlite:/var/local/hydratk/test.db3' c = DBO(dsn) d.connect()
- close
Method disconnects from server using sqlite3 method close.
- commit
Method commits transaction using sqlite3 method commit.
- execute
Method executes query using sqlite3 method execute and returns cursor (results must be extracted i.e. using method fetchall).
# read query res = d.execute('SELECT count(*) FROM customer').fetchall() # write query d.execute('INSERT INTO lov_status VALUES (4, \'test\')') # variables binding res = d.execute('SELECT * FROM lov_status WHERE id = %s', [4]).fetchall()
- rollback
Method rollbacks transaction using sqlite3 method rollback.
- __getitem__
Method gets given psycopg2 attribute if exists.
- __getattr__
Method gets given connection or psycopg2 attribute if exists.
- table_exists
Method checks if given table exists in database. It executes special query SELECT count(*) found FROM sqlite_master where type=’table’ and tbl_name=?.
res = d.table_exists('customer')
- database_exists
Method checks whether database file is created and not empty.
res = d.database_exists()
- remove_database
Method deletes database file.
res = d.remove_database()
- erase_database
Method drops all tables in database. It executes special query select name from sqlite_master where type is ‘table’. Then it drops them using query.
- result_as_dict
Method sets row factory to return query result in dictionary form.
# no dictionary d.result_as_dict(False) recs = d.execute('SELECT * FROM lov_status').fetchall() # access recs[0][1] # dictionary d.result_as_dict(True) recs = d.execute('SELECT * FROM lov_status').fetchall() # access recs[0]['title']