Exemplo n.º 1
0
class Database:
    def __init__(self, url: str):
        #self.url = DatabaseURL(url)
        self.url = url
        if app.is_async:
            from databases import Database as EncodeDatabase
            # NO +pymysql
            self.encodedb = EncodeDatabase(
                "mysql://*****:*****@127.0.0.1/uvicore_wiki")

            @app.http.on_event("startup")
            async def startup():
                await self.encodedb.connect()

            @app.http.on_event("shutdown")
            async def shutdown():
                await self.encodedb.disconnect()
        else:

            self.engine = create_engine(self.url, echo=True)

        from sqlalchemy import MetaData
        self.metadata = MetaData()

    def connect(self):
        return self.engine.connect()

    def fetchone(self, entity: E, query) -> E:
        if app.is_async:
            return self.encodedb.fetch_one(query=query)
        else:
            with self.connect() as con:
                results = con.execute(query)
                return entity(**results.fetchone())

    def fetchall(self, entity, query) -> List[E]:
        if app.is_async:
            return self.encodedb.fetch_all(query=query)
        else:
            with self.connect() as con:
                results = con.execute(query)
                rows = []
                for row in results:
                    #rows.append(entity.User(**row))
                    rows.append(entity(**row))
                return rows
Exemplo n.º 2
0
class ShowsDB(object):
    def __init__(self):
        self.database = Database(url=DATABASE_URL,
                                 ssl='require',
                                 min_size=1,
                                 max_size=2)
        self.metadata = MetaData()
        self.shows = Table('shows', self.metadata,
                           Column('show_id', Integer, primary_key=True),
                           Column('type', String, nullable=True),
                           Column('title', String, nullable=True),
                           Column('director', String, nullable=True),
                           Column('cast', String, nullable=True),
                           Column('country', String, nullable=True),
                           Column('date_added', Date, nullable=True),
                           Column('release_year', Integer, nullable=True),
                           Column('rating', String, nullable=True),
                           Column('duration', String, nullable=True),
                           Column('listed_in', String, nullable=True),
                           Column('description', String, nullable=True))

    def initialize(self):
        engine = create_engine(DATABASE_URL)
        self.metadata.create_all(engine)
        return self

    def connect(self):
        return self.database.connect()

    def disconnect(self):
        return self.database.disconnect()

    def execute(self, query, get='all'):
        if get != 'all':
            return self.database.fetch_one(query)
        return self.database.fetch_all(query)

    def fetch_all(self, query):
        return self.database.fetch_all(query)