dbOperations reference - VilleSysinoro/PGViewExportTool GitHub Wiki
DBOPERATIONS-module
dbOperations.py
on moduuli, joka tarjoaa perustyökalut tietokannan objektien käyttämiseen. Moduuli perustuu Psycopg2
-kirjastoon. Se sisältää seuraavaat luokat:
Luokka | Käyttötarkoitus |
---|---|
DbConnection |
Muodostaa yhteyden tietokantaan ja mahdollistaa datan CRUD (Create, Read, Update, Delete) |
DbConnection-luokka
Luokan avulla luodaan yhteysolio, jonka metodien avulla voidaan lisätä, lukea, muokata ja poistaa tietokannan tauluista.
Muodostin
Konstruktorimetodi: dbconnection = DbConnection(settingsDictionary)
, jossa settingsDictionary on tietokannan yhteysmerkkijonoon tarvittavat tiedot avain-arvo-pareina.
Esimerkki:
settingsDictionary = {'server': 'localhost',
'port': '5433',
'database': 'testaus',
'userName': 'postgres',
'password': 'Q2werty'}
dbconnection = DbConnection(settingsDictionary)
Palvelimen nimenä server
voi käyttää palvelimen nimeä tai IP-osoitetta.
Ominaisuudet
Ominasuus (kenttä) | Sisältö |
---|---|
self.server |
Palvelimen nimi tai IP-osoite |
self.port |
Palvelimen käyttämä porttinumero |
self.databaseName |
Palvelimen käyttämä nimi |
self.userName |
Käyttäjätunnus |
self.password |
Tunnukseen liitetty salasana |
self.connectionString |
Edellisistä tiedoista muodostetty yhteysmerkkijono |
Metodit
Luokasta muodostetuilla oliolla on seuraavat metodit
Metodit:
-
addToTable(self, table: str, data: dict) -> None
: Lisää tauluun table tiedot sanakirjasta dict -
deleteRowsFromTable(self, table, criteriaColumn, criteriaValue) -> None
: Poistaa taulusta table rivit, joissa sarakkeen criteriaColumn arvo on_criteriaValue_ -
filterColumsFromTable(self, table: str, columns: list, filter:str) -> list | None
: Lukee taulusta table suodatusehdot filter täyttävät rivit ja näyttää määritellyt sarakkeet columns -
filterDistinctColumsFromTable(self, table: str, columns: list, filter:str) -> list | None
: Lukee taulusta tai näkymästä ainutkertaiset tietueet eli jättää kaksoisarvot pois -
getColumnNames(self, table: str) -> list
: Hakee taulun tai näkymän sarakkeiden nimet -
getPgTimestamp(self) -> str
: Hakee tietokantapalvelimelta aikaleiman ja muuntaa sen Python-muotoon -
modifyTableData(self, table: str, column: str, newValue, criteriaColumn: str, criteriaValue) -> None
: Muokataan taulun table sarakkeen column arvoksi newValue, kun ehtosarakkeen criteriaColumn arvona on criteriaValue -
readAllColumnsFromTable(self, table: str) -> list None
: Lukee taulun table kaikkien sarakkeiden tiedot -
readColumsFromTable(self, table: str, columns: list) -> list
: Lukee taulusta table listana columns annettujen sarakkeiden tiedot -
updateBinaryField(self, table: str, column: str, criteriaColumn: str, criteriaValue, data) -> None
: Päivitetään taulun table binäärisaraketta clolumn, kun ehtosarakkeen criteriaColumn arvona oon criteriaValue, binääritieto on data -argumenttina.
addToTable
addToTable(self, table: str, data: dict) -> None
-metodilla lisätään sanakirjan tiedot taulun tietueeksi. Sanakirjan avaiment ovat samat kuin taulun sarakkeiden nimet. Seuraavassa esimerkissä lisätään tauluun asiakas
sarakkeiden etunimi
ja sukunimi
.
Esimerkki:
settingsDictionary = {'server': 'localhost',
'port': '5432',
'database': 'testaus',
'userName': 'postgres',
'password': 'Q2werty7'}
dbConnection = dbOperations.DbConnection(settingsDictionary)
dbConnection.addToTable('asiakas', {'etunimi': 'Erkki', 'sukunimi': 'Esimerkki'})
filterColumsFromTable
filterColumsFromTable(self, table: str, columns: list, filter:str) -> list | None
-metodi palauttaa annetun ehdon täyttävän tulosjoukon, jonka sarakkeet on määritelty metodin argumentteina. filter
-argumentti määritellään FString-komennolla, jotta merkkijonoihin saadaan SQL:n vaatimat puolilainausmerkit '
Esimerkki:
settingsDictionary = {'server': 'localhost',
'port': '5432',
'database': 'testaus',
'userName': 'postgres',
'password': 'Q2werty7'}
dbConnection3 = dbOperations.DbConnection(settingsDictionary)
filterText = f"etunimi = 'Jakke'"
results = dbConnection3.filterColumsFromTable('asiakas', ['etunimi', 'sukunimi'], filterText)
print(results)
modifyTableData
modifyTableData(self, table: str, column: str, newValue, criteriaColumn: str, criteriaValue)
-metodin avulla voidaan päivittää taulun table ehdot täyttävien tietueiden sarakkeen column uudeksi arvoksi newValue. Ehto määritellään sarakkeen criteriaColumn arvon criteriaValue perusteella. criteriaValue
ja newValue
argumentit määritellään FString-muodossa, jotta merkkijonoihin saadaan tarvittaessa SQL:n edellyttämät puolilainausmerkit '
.
Esimerkki:
settingsDictionary = {'server': 'localhost',
'port': '5432',
'database': 'testaus',
'userName': 'postgres',
'password': 'Q2werty7'}
dbConnection4 = dbOperations.DbConnection(settingsDictionary)
criteriaValue = f"'Essi'"
newValue = f"'Eräjärvi'"
dbConnection4.modifyTableData('asiakas', 'sukunimi', newValue, 'etunimi', criteriaValue)
readAllColumnsFromTable
Metodi paluttaa listan (list), jonka jäseninä on monikoita (tuple)
dbConnection2 = dbOperations.DbConnection(settingsDictionary)
asiakasLista = dbConnection2.readAllColumnsFromTable('asiakas')
print(asiakasLista)
Esimekin koodi tulostaa seuraavat tiedot: [('Erkki', 'Esimerkki'), ('Essi', 'Esimerkki')]
updateBinaryField
updateBinaryField(self, table: str, column: str, criteriaColumn: str, criteriaValue, data)
-metodin avulla päivitetään binääritietoja sisältävää saraketta. Binääritietona (data) voi olla esim. kuvatiedosto tai äänitiedosto. Psycopg2-kirjasto tallentaa tiedot aina monikkoina. Metodia käyttäessä ei tarvitse käyttää monikoita. Sisäisesti metodi käyttää monikkoaseuraavalla tavalla:
# Määritellään f-stringin avulla lopullinen SQL-lause, paikkamerkki %s korvautuu binääritiedolla data
sqlClause = f'UPDATE {table} SET {column} = %s WHERE {criteriaColumn} = {criteriaValue}'
# Suoritetaan SQL-lause ja lisätään data-muuttuja monikkona käyttäen sulkuja ja pilkkua
cursor.execute(sqlClause, (data,))
Seuraavassa esimerkissä päivitetään auton kuva, jonka rekisterinumero on XYZ-123. Auton kuva on luettu muuttujaan pictureDara
numberPlate = 'XYZ-123'
dbConnection3 = dbOperations.DbConnection(settingsDictionary
dbConnection3.updateBinaryField('auto', 'kuva', 'rekisterinumero', f"'{numberPlate}'", pictureData
Huomaa, että esimerkissä rekisterinumero pitää olla SQL-merkkijono, jossa on puolilainausmerkit.