Last active
January 26, 2023 16:24
Revisions
-
dario61081 revised this gist
Jan 26, 2023 . 1 changed file with 28 additions and 3 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,3 +1,9 @@ import hashlib from sqlalchemy import create_engine, MetaData, text from sqlalchemy.exc import DatabaseError from sqlalchemy.orm import sessionmaker, declarative_base class Database: def __init__(self, **kwargs): @@ -9,6 +15,7 @@ def __init__(self, **kwargs): self.driver = kwargs.get('driver', 'mysql+pymysql') self.uri = f"{self.driver}://{self.username}:{self.password}@{self.host}:{self.port}/{self.database}" print(self.uri) self.engine = create_engine(self.uri, poolclass=None) self.cn = self.engine.connect() self.metadata = MetaData(bind=self.engine) @@ -18,16 +25,34 @@ def execute(self, query: str, **kwargs): return self.cn.execute(text(query), **kwargs) def fetch_all(self, query: str, **kwargs): return self.execute(query, **kwargs).fetchall() def fetch_one(self, query: str, **kwargs): return self.execute(query, **kwargs).fetchone() def fetch_scalar(self, query: str, **kwargs): return self.execute(query, **kwargs).scalar() def get_session(self): return sessionmaker(self.engine)() def secure_password(self, passwrd: str): return hashlib.sha512(passwrd.encode()).hexdigest() def create_schema(self, a_base: declarative_base): a_base.metadata.create_all(bind=self.engine, checkfirst=True) for class_item in a_base.__subclasses__(): if hasattr(class_item, "data"): try: print(f"found inicial data for {class_item}") items = class_item().data() s = self.get_session() for row in items: s.merge(row) s.commit() except DatabaseError: continue def drop_schema(self, a_base: declarative_base): a_base.metadata.drop_all(bind=self.engine) -
dario61081 revised this gist
Jan 23, 2023 . 1 changed file with 3 additions and 0 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -28,3 +28,6 @@ def fetch_scalar(self, query: str, **kwargs): def get_session(self): return sessionmaker(self.engine)() def secure_password(self, passwrd: str): return hashlib.sha512(passwrd.encode()).hexdigest() -
dario61081 created this gist
Jan 23, 2023 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,30 @@ class Database: def __init__(self, **kwargs): self.username = kwargs.get('username', 'root') self.password = kwargs.get('password', '') self.host = kwargs.get('host', 'localhost') self.port = kwargs.get('port', '3306') self.database = kwargs.get('database', '') self.driver = kwargs.get('driver', 'mysql+pymysql') self.uri = f"{self.driver}://{self.username}:{self.password}@{self.host}:{self.port}/{self.database}" self.engine = create_engine(self.uri, poolclass=None) self.cn = self.engine.connect() self.metadata = MetaData(bind=self.engine) # self.metadata.reflect(bind=self.engine) def execute(self, query: str, **kwargs): return self.cn.execute(text(query), **kwargs) def fetch_all(self, query: str, **kwargs): return self.execute(query, **kwargs).fetch_all() def fetch_one(self, query: str, **kwargs): return self.execute(query, **kwargs).fetch_one() def fetch_scalar(self, query: str, **kwargs): return self.execute(query, **kwargs).scalar() def get_session(self): return sessionmaker(self.engine)()