Add database functions

This commit is contained in:
knedlik
2025-12-05 22:52:38 +01:00
parent 3c0e58dfc1
commit 96be7567eb
17 changed files with 111 additions and 15 deletions

0
app/__init__.py Normal file
View File

Binary file not shown.

View File

@@ -1,11 +1,10 @@
import sqlite3
from pathlib import Path
import bcrypt
import pandas as pd
BASE_DIR = Path(__file__).resolve().parent.parent
DB_PATH = BASE_DIR / "data" / "app.db"
BASE_DIR = Path(__file__).resolve().parent
# DB_PATH = BASE_DIR / "app_db" / "app.db"
DB_PATH = BASE_DIR / "app.db"
def get_conn():
# check_same_thread=False, damit Streamlit mehrere Threads nutzen kann
@@ -14,4 +13,5 @@ def get_conn():
def get_list(sql, params=None):
conn = get_conn()
df = pd.read_sql_query(sql, conn, params=params)
conn.close()
return df

View File

@@ -2,7 +2,7 @@
from contextlib import closing
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(
username: str,
password: str,
role_id: str = "user",
role_id: int = 1,
email: str | None = None,
firstname: str | None = None,
lastname: str | None = None

View File

@@ -9,6 +9,7 @@ from auth import load_credentials_from_db, needs_password_change, update_passwor
def get_authenticator():
with open("config/auth.yaml", "r", encoding="utf-8") as f:
base_config = yaml.load(f, Loader=SafeLoader)
db_creds = load_credentials_from_db()
base_config["credentials"] = db_creds

0
app/data/__init__.py Normal file
View File

36
app/data/db.py Normal file
View 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
View 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"))

View File

@@ -0,0 +1 @@
select * from bi.Dim_Kostenobjekt

View File

@@ -0,0 +1 @@
select * from umsatz

View File

@@ -1,7 +1,16 @@
import streamlit as st
import logging
from logging_config import setup_logging
from version import __version__
from auth_runtime import require_login
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():
st.set_page_config(

View File

@@ -10,18 +10,17 @@ from auth import create_user
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__)
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"
MIGRATIONS_DIR = BASE_DIR / "migrations"
ADMIN_USERNAME = "admin"
print(BASE_DIR)
def get_connection() -> sqlite3.Connection:
DB_DIR.mkdir(exist_ok=True)
@@ -91,6 +90,11 @@ def admin_exists() -> bool:
"SELECT 1 FROM users WHERE username = ?",
(ADMIN_USERNAME,),
).fetchone()
if row is not None:
print(row[0])
else:
print(ADMIN_USERNAME)
print("Kein Admin gefunden")
return row is not None
@@ -111,9 +115,9 @@ def create_admin_user():
ok = create_user(
username=ADMIN_USERNAME,
password=pw1,
role="admin",
role_id=1,
email="admin@co_app",
firstname="co_app",
firstname="***",
lastname="admin"
)

0
app/pages/__init__.py Normal file
View File

24
app/pages/costobjects.py Normal file
View 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)

View File

@@ -1,7 +1,7 @@
import streamlit as st
from auth_runtime import require_login
from ui.sidebar import build_sidebar, hide_sidebar_if_logged_out
from auth import get_fullname_for_user, create_user
from ui.sidebar import hide_sidebar_if_logged_out
from auth import create_user
hide_sidebar_if_logged_out()

View File

@@ -1,8 +1,8 @@
from contextlib import closing
import streamlit as st
from auth import get_fullname_for_user, get_role_for_user
from db import get_conn, get_list
import sqlite3
from app_db.app_db import get_conn, get_list
# import sqlite3
def build_sidebar():

View File

@@ -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