Rename folders, add DB parser and improve DB setup
This commit is contained in:
@@ -1,25 +1,49 @@
|
||||
from os import environ
|
||||
|
||||
from sqlalchemy import create_engine
|
||||
from subprocess import call
|
||||
from sys import argv
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
from flask import Flask
|
||||
from fields import Glacier, Annual_Data, Annual_Change, User
|
||||
|
||||
|
||||
def create_connection():
|
||||
db_name = get_env_variable("DB_NAME")
|
||||
db_user = get_env_variable("DB_USER")
|
||||
db_password = get_env_variable("DB_PASSWORD")
|
||||
db_url = get_env_variable("DB_URL")
|
||||
db_connection_uri = "mysql+pymysql://{user}:{pw}@{url}/{db}".format(
|
||||
user=db_user, pw=db_password, url=db_url, db=db_name
|
||||
def create_database(db_name, db_user, db_pw):
|
||||
script = "mariadb_setup.sh"
|
||||
output = call([script + db_name + db_user + db_pw])
|
||||
if output != 0:
|
||||
print("Error: couldn't create database")
|
||||
exit()
|
||||
|
||||
|
||||
def create_connection(db_name, db_user, db_pw):
|
||||
host = "localhost:3306"
|
||||
connection_uri = "mysql+pymysql://{user}:{pw}@{url}/{db}".format(
|
||||
user=db_user, pw=db_pw, url=host, db=db_name
|
||||
)
|
||||
engine = create_engine(db_connection_uri, echo=True)
|
||||
app = Flask(__name__)
|
||||
app.config["SQLALCHEMY_DATABASE_URI"] = connection_uri
|
||||
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
|
||||
global db
|
||||
db = SQLAlchemy(app)
|
||||
|
||||
|
||||
def create_tables():
|
||||
def create_tables(db):
|
||||
db.create_all()
|
||||
|
||||
|
||||
def get_env_variable(name):
|
||||
try:
|
||||
return environ[name]
|
||||
except KeyError:
|
||||
message = "Expected environment variable '{}' not set.".format(name)
|
||||
raise Exception(message)
|
||||
def main():
|
||||
if len(argv) != 3:
|
||||
print(
|
||||
"Usage: " + argv[0] + " <database name> <database user> <database password>"
|
||||
)
|
||||
exit()
|
||||
|
||||
db_name = str(argv[1])
|
||||
db_user = str(argv[2])
|
||||
db_password = str(argv[3])
|
||||
|
||||
create_database(db_name, db_user, db_password)
|
||||
create_connection(db_name, db_user, db_password)
|
||||
create_tables(db)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
52
Code/database/fields.py
Normal file
52
Code/database/fields.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from db_setup import db
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
class Glacier(db.Model):
|
||||
uid = db.Column(db.Integer, primary_key=True)
|
||||
country = db.Column(db.String(30))
|
||||
name = db.Column(db.String(30))
|
||||
|
||||
def __init__(self, uid, country, name):
|
||||
self.uid = uid
|
||||
self.country = country
|
||||
self.name = name
|
||||
|
||||
|
||||
class Annual_Data(db.Model):
|
||||
glacier = db.relationship("Glacier", backref=db.backref("posts", lazy=True))
|
||||
uid = db.Column(db.Integer, db.ForeignKey("glacier.uid"), nullable=False)
|
||||
surface = db.Column(db.Integer)
|
||||
volume = db.Column(db.Integer)
|
||||
thickness = db.Column(db.Integer)
|
||||
year = db.Column(db.Integer)
|
||||
|
||||
def __init__(self, surface, volume, thickness, year):
|
||||
self.surface = surface
|
||||
self.volume = volume
|
||||
self.thickness = thickness
|
||||
self.year = year
|
||||
|
||||
|
||||
class Annual_Change(db.Model):
|
||||
glacier = db.relationship("Glacier", backref=db.backref("posts", lazy=True))
|
||||
uid = db.Column(db.Integer, db.ForeignKey("glacier.uid"), nullable=False)
|
||||
surface_change = db.Column(db.Integer)
|
||||
volume_change = db.Column(db.Integer)
|
||||
thickness_change = db.Column(db.Integer)
|
||||
year = db.Column(db.Integer)
|
||||
|
||||
def __init__(self, surface_change, volume_change, thickness_change, year):
|
||||
self.surface_change = surface_change
|
||||
self.volume_change = volume_change
|
||||
self.thickness_change = thickness_change
|
||||
self.year = year
|
||||
|
||||
|
||||
class Users(db.Model):
|
||||
uid = db.Column(db.Integer, primary_key=True)
|
||||
registration_date = db.Column(db.DateTime, nullable=False)
|
||||
|
||||
def __init__(self, uid):
|
||||
self.uid = uid
|
||||
self.registration_date = datetime.today()
|
||||
16
Code/database/parse_csv.py
Normal file
16
Code/database/parse_csv.py
Normal file
@@ -0,0 +1,16 @@
|
||||
from pandas import read_csv, concat, DataFrame
|
||||
from iso3166 import countries
|
||||
|
||||
|
||||
def select_columns() -> [DataFrame]:
|
||||
min_year = 2010
|
||||
fields = ["POLITICAL_UNIT", "WGMS_ID", "YEAR"]
|
||||
iter_csv = read_csv(
|
||||
"../../Assets/WGMS-FoG-2019-12-D-CHANGE.csv",
|
||||
skipinitialspace=True,
|
||||
usecols=fields,
|
||||
iterator=True,
|
||||
chunksize=100,
|
||||
)
|
||||
data = concat([chunk[chunk["YEAR"] > min_year] for chunk in iter_csv])
|
||||
return data
|
||||
Reference in New Issue
Block a user