Managers#
The manager objects are responsible for managing inputs or outputs. We can have three macro types of managers: database, file and ldap.
Type of managers#
Each type of manager is managed by micro types; Below is the complete list:
- Database
sqlite (SQLite)
mysql (MySQL or MariaDB)
postgresql (PostgreSQL or EnterpriseDB)
- File
file (standard text file)
log (log file)
csv (Comma Separated Value file)
json (JSON file)
yaml (YAML file)
xlsx (Microsoft Excel file)
- LDAP
ldap (Active Directory Server, OpenLDAP, FreeIPA, etc.)
- NoSQL
nosql (MongoDB, CouchDB, RavenDB, Redis, Neo4j, Cassandra, etc.)
Note
The connection arguments of a DatabaseManager vary according to the type of database being accessed.
Look at the manuals and documentation of each type of database to find out more.
import pyreports
# DatabaseManager object
sqlite_db = pyreports.manager('sqlite', database='/tmp/mydb.db')
mysql_db = pyreports.manager('mysql', host='mysql1.local', database='test', user='dba', password='dba0000')
postgresql_db = pyreports.manager('postgresql', host='postgresql1.local', database='test', user='dba', password='dba0000')
# FileManager object
file = pyreports.manager('file', '/tmp/text.txt')
log = pyreports.manager('log', '/tmp/log.log')
csv = pyreports.manager('csv', '/tmp/csv.csv')
json = pyreports.manager('json', '/tmp/json.json')
yaml = pyreports.manager('yaml', '/tmp/yaml.yml')
xlsx = pyreports.manager('xlsx', '/tmp/xlsx.xlsx')
# LdapManager object
ldap = pyreports.manager('ldap', server='ldap.local', username='user', password='password', ssl=False, tls=True)
# NoSQLManager object (nosql api compliant https://nosqlapi.rtfd.io/)
nosql = pyreports.manager('nosql', MongoDBConnection, host='mongo1.local', database='test', user='dba', password='dba0000')
Managers at work#
A Manager object corresponds to each type of manager. And each Manager object has its own methods for writing and reading data.
DatabaseManager#
Databasemanager have eight methods that are used to reconnect, query, commit changes and much more. Let’s see these methods in action below.
Note
The following example will be done on a mysql type database, but it can be applied to any database because DB-API 2.0 is used.
import pyreports
# DatabaseManager object
mysql_db = pyreports.manager('mysql', host='mysql1.local', database='test', user='dba', password='dba0000')
# Reconnect to database
mysql_db.reconnect()
# Query: CREATE
mysql_db.execute("CREATE TABLE cars(id SERIAL PRIMARY KEY, name VARCHAR(255), price INT)")
# Query: INSERT
mysql_db.execute("INSERT INTO cars(name, price) VALUES('Audi', 52642)")
# Query: INSERT (many)
new_cars = [
('Alfa Romeo', 42123),
('Aston Martin', 78324),
('Ferrari', 129782),
]
mysql_db.executemany("INSERT INTO cars(name, price) VALUES(%s, %s)", new_cars)
# Commit changes
mysql_db.commit()
# Query: SELECT
mysql_db.execute('SELECT * FROM cars')
# View description and other info of last query
print(mysql_db.description, mysql_db.lastrowid, mysql_db.rowcount)
# Fetch all data
print(mysql_db.fetchall()) # Dataset object
# Fetch first row
print(mysql_db.fetchone()) # Dataset object
# Fetch select N row
print(mysql_db.fetchmany(2)) # Dataset object
print(mysql_db.fetchmany()) # This is same fetchone() method
# Query: SHOW
mysql_db.execute("SHOW TABLES")
print(mysql_db.fetchall()) # Dataset object
# Call store procedure
mysql_db.callproc('select_cars')
mysql_db.callproc('select_cars', ['Audi']) # Call with args
print(mysql_db.fetchall()) # Dataset object
Note
Whatever operation is done, the return value of the fetch* methods return Dataset objects.
FileManager#
FileManager has two simple methods: read and write. Let’s see how to use this manager.
import pyreports
# FileManager object
csv = pyreports.manager('csv', '/tmp/cars.csv')
# Read data
cars = csv.read() # Dataset object
# Write data
cars.append(['Audi', 52642])
csv.write(cars)
LdapManager#
LdapManager is an object that allows you to interface and get data from a directory server via the ldap protocol.
import pyreports
# LdapManager object
ldap = pyreports.manager('ldap', server='ldap.local', username='user', password='password', ssl=False, tls=True)
# Rebind connection
ldap.rebind()
# Query: get data
# This is Dataset object
users = ldap.query('DC=test,DC=local', '(&(objectClass=user)(objectCategory=person))', ['name', 'mail', 'phone'])
if users:
print(users)
# Close connection
ldap.unbind()
Warning
LdapManager should only be used for inputs. An ldap manager has no write methods.
NoSQLManager#
NoSQLManager is an object that allows you to interface and get data from a NoSQL database server.
import pyreports
# LdapManager object
nosql = pyreports.manager('nosql', MongoDBConnection, host='mongo1.local', database='test', user='dba', password='dba0000')
# Get data
nosql.get('doc1') # Dataset object
# Find data
nosql.find('{"name": "Matteo"}') # Dataset object
Note
NoSQLManager object accept connection that must be compliant of nosqlapi.