mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-30 21:41:41 +08:00
feat: new orm module
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
import logging
|
||||
from .connector import Connector
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Update:
|
||||
def __init__(self, db: Connector, table_name: str, data: dict):
|
||||
self.db = db
|
||||
def __init__(self, connector, table_name: str, data: dict):
|
||||
self._connector = connector
|
||||
self._table_name = table_name
|
||||
self._columns = data.items()
|
||||
|
||||
@@ -18,10 +17,10 @@ class Update:
|
||||
]
|
||||
)
|
||||
create_table_sql = f"CREATE TABLE IF NOT EXISTS {self._table_name} ({columns});"
|
||||
self.db.execute(create_table_sql)
|
||||
self.db.execute(f"PRAGMA table_info({self._table_name})")
|
||||
self._connector.execute(create_table_sql)
|
||||
self._connector.execute(f"PRAGMA table_info({self._table_name})")
|
||||
existing_columns = {
|
||||
column_info[1]: column_info for column_info in self.db.fetchall()
|
||||
column_info[1]: column_info for column_info in self._connector.fetchall()
|
||||
}
|
||||
for key, value in self._columns:
|
||||
if key not in existing_columns:
|
||||
@@ -29,26 +28,49 @@ class Update:
|
||||
if value is None:
|
||||
value = "NULL"
|
||||
add_column_sql = f"ALTER TABLE {self._table_name} ADD COLUMN {key} {insert_column} DEFAULT {value};"
|
||||
self.db.execute(add_column_sql)
|
||||
self._connector.execute(add_column_sql)
|
||||
logger.debug(f"Create / Update table {self._table_name}.")
|
||||
|
||||
def one(self, data: dict) -> bool:
|
||||
_id = data.pop("id")
|
||||
_id = data["id"]
|
||||
set_sql = ", ".join([f"{key} = :{key}" for key in data.keys()])
|
||||
self.db.execute(
|
||||
self._connector.execute(
|
||||
f"""
|
||||
UPDATE {self._table_name}
|
||||
SET {set_sql}
|
||||
WHERE id = {_id}
|
||||
WHERE id = :id
|
||||
""",
|
||||
data,
|
||||
)
|
||||
logger.debug(f"Update {_id} in {self._table_name}.")
|
||||
return True
|
||||
|
||||
def list(self, data: list[dict]):
|
||||
for item in data:
|
||||
self.one(item)
|
||||
def many(self, data: list[dict]) -> bool:
|
||||
columns = ", ".join(data[0].keys())
|
||||
self._connector.executemany(
|
||||
f"""
|
||||
UPDATE {self._table_name}
|
||||
SET {columns}
|
||||
WHERE id = :id
|
||||
""",
|
||||
data,
|
||||
)
|
||||
logger.debug(f"Update {self._table_name}.")
|
||||
return True
|
||||
|
||||
def value(self, location: dict, set_value: dict) -> bool:
|
||||
set_sql = ", ".join([f"{key} = :{key}" for key in set_value.keys()])
|
||||
params = {**location, **set_value}
|
||||
self._connector.execute(
|
||||
f"""
|
||||
UPDATE {self._table_name}
|
||||
SET {set_sql}
|
||||
WHERE {location["key"]} = :{location["key"]}
|
||||
""",
|
||||
params,
|
||||
)
|
||||
logger.debug(f"Update {self._table_name}.")
|
||||
return True
|
||||
|
||||
@staticmethod
|
||||
def __python_to_sqlite_type(value) -> str:
|
||||
@@ -65,4 +87,4 @@ class Update:
|
||||
elif value is None:
|
||||
return "TEXT"
|
||||
else:
|
||||
raise ValueError(f"Unsupported data type: {type(value)}")
|
||||
raise ValueError(f"Unsupported data type: {type(value)}")
|
||||
|
||||
Reference in New Issue
Block a user