Newer
Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Jul 14 13:43:45 2021
export the stationlist to database
@author: geopeter
"""
import psycopg2
import psycopg2.extras
from psycopg2 import sql
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# Connect to DB "postgres" to check for database "temperatures_berteld_morstein"
def check_for_db_existence():
print("Checking for database existence")
with psycopg2.connect(database='postgres', user='postgres', password='postgres', host='localhost', port=5432) as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT datname FROM pg_database WHERE datname LIKE 'temperatures_berteld_morstein';")
try:
db_exists = cursor.fetchall()[0]
print('DB existing')
except IndexError: # DB temperatures_berteld_morstein doesn't exist
print('DB not existing')
try:
create_db(connection, cursor)
create_table()
print('Successfully created database and table')
except (Exception, psycopg2.DatabaseError) as error:
print(error)
# Use existing connection to DB "postgres" to create DB "temperatures_berteld_morstein"
def create_db(connection, cursor):
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) # Needs to be in AUTOCOMMIT mode for creating database
create_db_query = sql.SQL("CREATE DATABASE temperatures_berteld_morstein;")
print(create_db_query)
cursor.execute(create_db_query)
# Connect to DB "temperatures_berteld_morstein" to create table "temperatures"
def create_table():
with psycopg2.connect(database='temperatures_berteld_morstein', user='postgres', password='postgres', host='localhost', port=5432) as connection:
with connection.cursor() as cursor:
query = sql.SQL("CREATE TABLE temperatures (id INTEGER, lon NUMERIC, lat NUMERIC, country TEXT);")
print(query)
cursor.execute(query)
def insert_data(stationList):
with psycopg2.connect(database='temperatures_berteld_morstein', user='postgres', password='postgres', host='localhost', port=5432) as connection:
with connection.cursor() as cursor:
if len(stationList) > 0:
df_columns = list(stationList)
# create (col1,col2,...)
columns = ",".join(df_columns)
# create VALUES('%s', '%s",...) one '%s' per column
values = "VALUES({})".format(",".join(["%s" for _ in df_columns]))
# create INSERT INTO table (columns) VALUES('%s',...)
insert_stmt = "INSERT INTO {} ({}) {}".format('temperatures', columns, values)
psycopg2.extras.execute_batch(cursor, insert_stmt, stationList.values)
check_for_db_existence()
insert_data(stationList)
# return stationList