Starting the slow migration to FastAPI...
This commit is contained in:
78
app/db.py
78
app/db.py
@@ -1,25 +1,36 @@
|
||||
import secrets
|
||||
from datetime import timedelta
|
||||
|
||||
from app.config import settings
|
||||
from .log import *
|
||||
|
||||
from sqlalchemy import create_engine, text
|
||||
from sqlalchemy.exc import IntegrityError, OperationalError
|
||||
#from app import db
|
||||
#from sqlalchemy.ext.declarative import declarative_base
|
||||
#from sqlalchemy.orm import sessionmaker, session
|
||||
|
||||
AMS_DB_SERVER = 'linode.oneskyit.com'
|
||||
AMS_DB_PORT = '3306' # default = 3306
|
||||
AMS_DB_NAME = 'aether_dev' #onesky_ams_dev
|
||||
AMS_DB_USERNAME = 'onesky_aether'
|
||||
AMS_DB_PASSWORD = '$onesky.Aether.2020'
|
||||
db_uri = settings.SQLALCHEMY_DATABASE_URI
|
||||
|
||||
|
||||
connection_string = 'mysql://'+AMS_DB_USERNAME+':'+AMS_DB_PASSWORD+'@'+AMS_DB_SERVER+'/'+AMS_DB_NAME
|
||||
connection_string = db_uri
|
||||
engine = create_engine(name_or_url=connection_string, pool_size=10, pool_recycle=120, pool_pre_ping=True, echo=True, echo_pool=True, isolation_level='READ COMMITTED')
|
||||
# NOTE: The default isolation_level is 'REPEATABLE READ'. This can sometimes not show updated data.
|
||||
|
||||
#SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||
|
||||
#Base = declarative_base()
|
||||
|
||||
db = engine.connect()
|
||||
|
||||
|
||||
# Dependency
|
||||
#def get_db():
|
||||
#db = SessionLocal()
|
||||
#try:
|
||||
#yield db
|
||||
#finally:
|
||||
#db.close()
|
||||
|
||||
|
||||
# Insert a new record with values given.
|
||||
def sql_insert(table_name=None, record=None, sql=None, data=None, id_random_length=None):
|
||||
print('** sql_insert() ***')
|
||||
@@ -104,7 +115,10 @@ def sql_insert(table_name=None, record=None, sql=None, data=None, id_random_leng
|
||||
|
||||
# NOTE: Select records using custom SQL SELECT statements.
|
||||
def sql_select(sql=None, data=None, table_name=None, record_id=None, record_id_random=None, field_name=None, field_value=None, as_list=False):
|
||||
print('*** sql_select() ***')
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARN, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
custom_sql = None
|
||||
|
||||
if record_id and table_name:
|
||||
sql = text(
|
||||
@@ -130,6 +144,8 @@ def sql_select(sql=None, data=None, table_name=None, record_id=None, record_id_r
|
||||
WHERE `"""+table_name+"""`."""+field_name+""" = :field_value
|
||||
"""
|
||||
)
|
||||
data = {}
|
||||
data[field_name] = field_value
|
||||
elif table_name:
|
||||
sql = text(
|
||||
"""
|
||||
@@ -138,42 +154,48 @@ def sql_select(sql=None, data=None, table_name=None, record_id=None, record_id_r
|
||||
"""
|
||||
)
|
||||
elif sql:
|
||||
print('SQL found')
|
||||
log.info('SQL found')
|
||||
custom_sql = True
|
||||
sql = text(sql)
|
||||
else:
|
||||
print('One or more required fields are missing')
|
||||
log.warn('One or more required fields are missing')
|
||||
return False
|
||||
|
||||
try:
|
||||
#if record_id or record_id_random:
|
||||
#result = db.execute(sql, record_id=record_id, record_id_random=record_id_random)
|
||||
#elif field_name and field_value:
|
||||
#result = db.execute(sql, field_value=field_value)
|
||||
#elif sql and data:
|
||||
#result = db.execute(sql, data)
|
||||
print('Executing SQL...')
|
||||
result = db.execute(sql, data=data, record_id=record_id, record_id_random=record_id_random, table_name=table_name, field_name=field_name, field_value=field_value)
|
||||
if not custom_sql:
|
||||
log.info('Executing a simple SQL select with no extra data dict...')
|
||||
result = db.execute(sql, record_id=record_id, record_id_random=record_id_random, table_name=table_name, field_name=field_name, field_value=field_value)
|
||||
elif custom_sql and data:
|
||||
log.info('Executing a custom SQL select and including the data dict...')
|
||||
result = db.execute(sql, data)
|
||||
elif custom_sql:
|
||||
log.info('Executing a custom SQL select with no extra data dict...')
|
||||
result = db.execute(sql)
|
||||
except Exception as e:
|
||||
print('*** An exception happened. ***')
|
||||
print(repr(e))
|
||||
print('***')
|
||||
print(str(e))
|
||||
print('^^^ exception ^^^')
|
||||
log.error('*** An exception happened. ***')
|
||||
log.error(repr(e))
|
||||
log.error('***')
|
||||
log.error(str(e))
|
||||
log.error('^^^ exception ^^^')
|
||||
return False
|
||||
else:
|
||||
if result.rowcount == 1 and as_list:
|
||||
print('Single as list')
|
||||
log.info('Found one record. Returning as a list.')
|
||||
record = dict(result.fetchone())
|
||||
return [record]
|
||||
elif result.rowcount == 1 and not as_list:
|
||||
print('Single as single')
|
||||
log.info('Found one record. Returning as a dict.')
|
||||
#record = result.fetchone()
|
||||
record = dict(result.fetchone())
|
||||
return record
|
||||
elif result.rowcount > 1:
|
||||
print('List as list')
|
||||
log.info('Found more than one record. Returning as a list of dicts.')
|
||||
#records = result.fetchall()
|
||||
records = [dict(u) for u in result.fetchall()]
|
||||
return records
|
||||
elif as_list:
|
||||
log.info('No records found. Returning as a list.')
|
||||
return [None]
|
||||
else:
|
||||
return False
|
||||
log.info('No records found. Returning None.')
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user