Add search_db function
This takes a number of arguments that can help narrow down a search query. It's not safe against % injection so be careful :^) Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import sqlite3
|
import sqlite3
|
||||||
|
import sys
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
@@ -50,15 +51,53 @@ def get_db(db_path: str = DB_PATH):
|
|||||||
|
|
||||||
|
|
||||||
def search_db(
|
def search_db(
|
||||||
board: Optional[str] = None,
|
board: str = "",
|
||||||
reason: Optional[str] = None,
|
reason: str = "",
|
||||||
name: Optional[str] = None,
|
name: str = "",
|
||||||
com: Optional[str] = None,
|
com: str = "",
|
||||||
sub: Optional[str] = None,
|
sub: str = "",
|
||||||
time_before: int = 0,
|
time_before: int = sys.maxsize,
|
||||||
time_after: int = 0,
|
time_after: int = 0,
|
||||||
md5: Optional[str] = None,
|
md5: str = "",
|
||||||
|
limit: int = 100,
|
||||||
|
page: int = 0,
|
||||||
):
|
):
|
||||||
query = """
|
db = get_db()
|
||||||
SELECT action, board, length, post, thumb_path, reason
|
result = db.execute(
|
||||||
"""
|
"""
|
||||||
|
select *
|
||||||
|
from bans
|
||||||
|
where
|
||||||
|
(:board is null or board like :board_like)
|
||||||
|
and (:reason = "" or reason like :reason_like)
|
||||||
|
and (:name = "" or name like :name_like)
|
||||||
|
and (:com = "" or com like :com_like)
|
||||||
|
and (:sub = "" or sub like :sub_like)
|
||||||
|
and (time <= :time_before)
|
||||||
|
and (time >= :time_after)
|
||||||
|
and (:md5 = "" or md5 like :md5_like)
|
||||||
|
order by id desc
|
||||||
|
limit :limit
|
||||||
|
offset :offset
|
||||||
|
""",
|
||||||
|
{
|
||||||
|
"board": board,
|
||||||
|
"board_like": f"%{board}%",
|
||||||
|
"reason": reason,
|
||||||
|
"reason_like": f"%{reason}%",
|
||||||
|
"name": name,
|
||||||
|
"name_like": f"%{name}%",
|
||||||
|
"com": com,
|
||||||
|
"com_like": f"%{com}%",
|
||||||
|
"sub": sub,
|
||||||
|
"sub_like": f"%{sub}%",
|
||||||
|
"time_before": time_before,
|
||||||
|
"time_after": time_after,
|
||||||
|
"md5": md5,
|
||||||
|
"md5_like": f"%{md5}%",
|
||||||
|
"limit": limit,
|
||||||
|
"offset": limit * page,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return list(result.fetchall())
|
||||||
|
|||||||
Reference in New Issue
Block a user