Add database functions
This commit is contained in:
0
app/__init__.py
Normal file
0
app/__init__.py
Normal file
Binary file not shown.
@@ -1,11 +1,10 @@
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import bcrypt
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parent.parent
|
BASE_DIR = Path(__file__).resolve().parent
|
||||||
DB_PATH = BASE_DIR / "data" / "app.db"
|
# DB_PATH = BASE_DIR / "app_db" / "app.db"
|
||||||
|
DB_PATH = BASE_DIR / "app.db"
|
||||||
|
|
||||||
def get_conn():
|
def get_conn():
|
||||||
# check_same_thread=False, damit Streamlit mehrere Threads nutzen kann
|
# check_same_thread=False, damit Streamlit mehrere Threads nutzen kann
|
||||||
@@ -14,4 +13,5 @@ def get_conn():
|
|||||||
def get_list(sql, params=None):
|
def get_list(sql, params=None):
|
||||||
conn = get_conn()
|
conn = get_conn()
|
||||||
df = pd.read_sql_query(sql, conn, params=params)
|
df = pd.read_sql_query(sql, conn, params=params)
|
||||||
|
conn.close()
|
||||||
return df
|
return df
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
import bcrypt
|
import bcrypt
|
||||||
|
|
||||||
from db import get_conn #, create_user, verify_user, get_role_for_user
|
from app_db.app_db import get_conn
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
@@ -12,7 +12,7 @@ from db import get_conn #, create_user, verify_user, get_role_for_user
|
|||||||
def create_user(
|
def create_user(
|
||||||
username: str,
|
username: str,
|
||||||
password: str,
|
password: str,
|
||||||
role_id: str = "user",
|
role_id: int = 1,
|
||||||
email: str | None = None,
|
email: str | None = None,
|
||||||
firstname: str | None = None,
|
firstname: str | None = None,
|
||||||
lastname: str | None = None
|
lastname: str | None = None
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from auth import load_credentials_from_db, needs_password_change, update_passwor
|
|||||||
def get_authenticator():
|
def get_authenticator():
|
||||||
with open("config/auth.yaml", "r", encoding="utf-8") as f:
|
with open("config/auth.yaml", "r", encoding="utf-8") as f:
|
||||||
base_config = yaml.load(f, Loader=SafeLoader)
|
base_config = yaml.load(f, Loader=SafeLoader)
|
||||||
|
|
||||||
db_creds = load_credentials_from_db()
|
db_creds = load_credentials_from_db()
|
||||||
base_config["credentials"] = db_creds
|
base_config["credentials"] = db_creds
|
||||||
|
|
||||||
|
|||||||
0
app/data/__init__.py
Normal file
0
app/data/__init__.py
Normal file
36
app/data/db.py
Normal file
36
app/data/db.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
from sqlalchemy import create_engine, Text
|
||||||
|
import pandas as pd
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
from pathlib import Path
|
||||||
|
from urllib.parse import quote
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
|
env_path = Path("config/settings.env")
|
||||||
|
load_dotenv(env_path)
|
||||||
|
|
||||||
|
oracle_conn_str = os.getenv("oracle_conn_str")
|
||||||
|
co_dw_conn_str = os.getenv("co_dw_conn_str")
|
||||||
|
co_daten_conn_str = os.getenv("co_daten_conn_str")
|
||||||
|
|
||||||
|
def get_conn(db):
|
||||||
|
match db:
|
||||||
|
case "oracle":
|
||||||
|
engine = create_engine(oracle_conn_str)
|
||||||
|
case "co_dw":
|
||||||
|
engine = create_engine(co_dw_conn_str)
|
||||||
|
case "co_daten":
|
||||||
|
engine = create_engine(co_dw_conn_str)
|
||||||
|
case _:
|
||||||
|
logging.info(f"Datenbank {db} konnte nicht gefunden werden")
|
||||||
|
return engine
|
||||||
|
|
||||||
|
# def get_data(db):
|
||||||
|
# engine = get_conn(db)
|
||||||
|
# with engine.connect() as conn:
|
||||||
|
# print(engine)
|
||||||
|
# return
|
||||||
|
|
||||||
|
# if __name__ == "__main__":
|
||||||
|
# get_data("co_daten")
|
||||||
10
app/data/scriptloader.py
Normal file
10
app/data/scriptloader.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
def get_sql(filename):
|
||||||
|
sql_query = Path(f"app/data/sql/{filename}.sql").read_text()
|
||||||
|
return sql_query
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print(get_sql("sales_umsatz"))
|
||||||
1
app/data/sql/co_kostenobjekte.sql
Normal file
1
app/data/sql/co_kostenobjekte.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
select * from bi.Dim_Kostenobjekt
|
||||||
1
app/data/sql/sales_umsatz.sql
Normal file
1
app/data/sql/sales_umsatz.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
select * from umsatz
|
||||||
@@ -1,7 +1,16 @@
|
|||||||
import streamlit as st
|
import streamlit as st
|
||||||
|
import logging
|
||||||
|
from logging_config import setup_logging
|
||||||
from version import __version__
|
from version import __version__
|
||||||
from auth_runtime import require_login
|
from auth_runtime import require_login
|
||||||
from ui.sidebar import build_sidebar
|
from ui.sidebar import build_sidebar
|
||||||
|
import os
|
||||||
|
|
||||||
|
APP_ENV = os.environ.get("APP_ENV", "dev")
|
||||||
|
|
||||||
|
logger = setup_logging(APP_ENV)
|
||||||
|
#logger.info(f"Starting migration - APP-Version {__version__}")
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
st.set_page_config(
|
st.set_page_config(
|
||||||
|
|||||||
@@ -10,18 +10,17 @@ from auth import create_user
|
|||||||
|
|
||||||
APP_ENV = os.environ.get("APP_ENV", "dev")
|
APP_ENV = os.environ.get("APP_ENV", "dev")
|
||||||
logger = setup_logging(APP_ENV)
|
logger = setup_logging(APP_ENV)
|
||||||
|
|
||||||
logger.info(f"Starting migration - APP-Version {__version__}")
|
logger.info(f"Starting migration - APP-Version {__version__}")
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = Path(__file__).resolve().parents[1]
|
BASE_DIR = Path(__file__).resolve().parents[1]
|
||||||
DB_DIR = BASE_DIR / "data"
|
DB_DIR = BASE_DIR / "app" / "app_db"
|
||||||
DB_PATH = DB_DIR / "app.db"
|
DB_PATH = DB_DIR / "app.db"
|
||||||
MIGRATIONS_DIR = BASE_DIR / "migrations"
|
MIGRATIONS_DIR = BASE_DIR / "migrations"
|
||||||
ADMIN_USERNAME = "admin"
|
ADMIN_USERNAME = "admin"
|
||||||
|
|
||||||
|
print(BASE_DIR)
|
||||||
|
|
||||||
def get_connection() -> sqlite3.Connection:
|
def get_connection() -> sqlite3.Connection:
|
||||||
DB_DIR.mkdir(exist_ok=True)
|
DB_DIR.mkdir(exist_ok=True)
|
||||||
@@ -91,6 +90,11 @@ def admin_exists() -> bool:
|
|||||||
"SELECT 1 FROM users WHERE username = ?",
|
"SELECT 1 FROM users WHERE username = ?",
|
||||||
(ADMIN_USERNAME,),
|
(ADMIN_USERNAME,),
|
||||||
).fetchone()
|
).fetchone()
|
||||||
|
if row is not None:
|
||||||
|
print(row[0])
|
||||||
|
else:
|
||||||
|
print(ADMIN_USERNAME)
|
||||||
|
print("Kein Admin gefunden")
|
||||||
return row is not None
|
return row is not None
|
||||||
|
|
||||||
|
|
||||||
@@ -111,9 +115,9 @@ def create_admin_user():
|
|||||||
ok = create_user(
|
ok = create_user(
|
||||||
username=ADMIN_USERNAME,
|
username=ADMIN_USERNAME,
|
||||||
password=pw1,
|
password=pw1,
|
||||||
role="admin",
|
role_id=1,
|
||||||
email="admin@co_app",
|
email="admin@co_app",
|
||||||
firstname="co_app",
|
firstname="***",
|
||||||
lastname="admin"
|
lastname="admin"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
0
app/pages/__init__.py
Normal file
0
app/pages/__init__.py
Normal file
24
app/pages/costobjects.py
Normal file
24
app/pages/costobjects.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import streamlit as st
|
||||||
|
import pandas as pd
|
||||||
|
from data.scriptloader import get_sql
|
||||||
|
from data.db import get_conn
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def load_data():
|
||||||
|
sql = get_sql("co_kostenobjekte")
|
||||||
|
print(sql)
|
||||||
|
engine = get_conn("co_dw")
|
||||||
|
with engine.connect() as conn:
|
||||||
|
df = pd.read_sql(sql, engine)
|
||||||
|
print(df)
|
||||||
|
return df
|
||||||
|
|
||||||
|
st.dataframe(load_data())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
df = load_data()
|
||||||
|
print(df)
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import streamlit as st
|
import streamlit as st
|
||||||
from auth_runtime import require_login
|
from auth_runtime import require_login
|
||||||
from ui.sidebar import build_sidebar, hide_sidebar_if_logged_out
|
from ui.sidebar import hide_sidebar_if_logged_out
|
||||||
from auth import get_fullname_for_user, create_user
|
from auth import create_user
|
||||||
|
|
||||||
hide_sidebar_if_logged_out()
|
hide_sidebar_if_logged_out()
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
import streamlit as st
|
import streamlit as st
|
||||||
from auth import get_fullname_for_user, get_role_for_user
|
from auth import get_fullname_for_user, get_role_for_user
|
||||||
from db import get_conn, get_list
|
from app_db.app_db import get_conn, get_list
|
||||||
import sqlite3
|
# import sqlite3
|
||||||
|
|
||||||
|
|
||||||
def build_sidebar():
|
def build_sidebar():
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# Databases
|
||||||
|
|
||||||
|
# Oracle
|
||||||
|
oracle_conn_str=oracle+oracledb://sp84p:data@ora:1522/?service_name=prod84
|
||||||
|
|
||||||
|
# gmn-conn\co_dw
|
||||||
|
co_dw_conn_str = mssql+pyodbc://co_app:JRHmi1KLwjgnF6@gmn-cont\controlling/co_dw?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes
|
||||||
|
|
||||||
|
# gmn-conn\co_daten
|
||||||
|
co_daten_conn_str = mssql+pyodbc://dw_user:Schneewittchen%4089887%%21@gmn-cont\controlling/co_daten?driver=ODBC+Driver+18+for+SQL+Server&TrustServerCertificate=yes
|
||||||
Reference in New Issue
Block a user