|
1 | | -"""MySQL data destination.""" |
| 1 | +"""SQL Database Client.""" |
| 2 | +import logging |
2 | 3 | from sqlalchemy.engine import create_engine |
3 | | -from sqlalchemy import MetaData, Table, Column, Integer, String |
| 4 | +from sqlalchemy import MetaData, Table |
4 | 5 |
|
| 6 | +logging.basicConfig(filename='logs/sql.log', |
| 7 | + format='%(asctime)s %(message)s') |
| 8 | +logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) |
5 | 9 |
|
6 | | -class MySQLClient: |
7 | 10 |
|
8 | | - def __init__(self, Config): |
9 | | - self.mysql_uri = Config.mysql_uri |
10 | | - self.engine = create_engine(self.mysql_uri) |
11 | | - self.metadata = MetaData() |
12 | | - self.table_name = Config.mysql_table |
13 | | - self.table = Table(Config.mysql_table, self.metadata, |
14 | | - Column('id', Integer), |
15 | | - Column('title', String), |
16 | | - Column('url', String), |
17 | | - Column('slug', String), |
18 | | - Column('views', Integer)) |
| 11 | +class SQLClient: |
19 | 12 |
|
20 | | - def insert_rows(self, rows): |
21 | | - """Insert rows into MySQL table.""" |
22 | | - self.engine.execute(f'TRUNCATE TABLE {self.table_name}') |
| 13 | + def __init__(self, uri=None, table=None): |
| 14 | + self.uri = uri |
| 15 | + self.table_name = table |
| 16 | + self.engine = create_engine(self.uri) |
| 17 | + self.metadata = MetaData(bind=self.engine) |
| 18 | + self.table = Table(table, |
| 19 | + self.metadata, |
| 20 | + autoload=True) |
| 21 | + |
| 22 | + def insert_rows(self, rows, replace=None): |
| 23 | + """Insert rows into SQL table.""" |
| 24 | + if replace: |
| 25 | + self.engine.execute(f'TRUNCATE TABLE {self.table_name}') |
23 | 26 | self.engine.execute(self.table.insert(), rows) |
24 | 27 | return [row.items()[0][1] for row in rows] |
| 28 | + |
| 29 | + def fetch_rows(self, query): |
| 30 | + """Fetch rows from SQL table via query.""" |
| 31 | + results = self.engine.execute(query).fetchall() |
| 32 | + return results |
0 commit comments