Files
chanbans/convert_db.py
Alek Ratzloff e85e3a03a0 Update database format
The old database format would keep the post data in a JSON string.
Now, post data is broken out into individual columns for searching more
easily.

Additionally, a convert script has been provided.

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
2023-07-25 15:45:50 -07:00

130 lines
2.7 KiB
Python

import json
import sqlite3
from chanbans.db import get_db
def dict_factory(cursor, row):
d = {}
for idx, col in enumerate(cursor.description):
d[col[0]] = row[idx]
return d
# Create a new database too
old_db = get_db()
new_db = sqlite3.connect("new_db.db")
new_db.executescript(
"""
create table if not exists bans(
id integer primary key,
action varchar(5),
board varchar(10),
length varchar(10),
now varchar(30),
name varchar(100),
trip varchar(30),
com text,
time varchar(30),
sub varchar(100),
nsfw boolean,
thumb varchar(100),
ext varchar(10),
w int,
h int,
tn_w int,
tn_h int,
md5 varchar(100),
fsize integer,
filename text,
tim varchar(30),
thumb_path text,
reason varchar(200)
);
"""
)
old_db.row_factory = dict_factory
bans = old_db.execute("SELECT * FROM BANS").fetchall()
import pprint
for ban in bans:
post = json.loads(ban["post"])
post["action"] = ban["action"]
# post['board'] = ban['board']
post["length"] = ban["length"]
post["thumb_path"] = ban["thumb_path"]
post["reason"] = ban["reason"]
if "nsfw" not in post:
post["nsfw"] = False
if "thumb" not in post:
post["thumb"] = None
if "ext" not in post:
post["ext"] = None
if "w" not in post:
post["w"] = 0
else:
post['w'] = int(post['w'])
if "h" not in post:
post["h"] = 0
else:
post['h'] = int(post['h'])
if "tn_w" not in post:
post["tn_w"] = 0
else:
post['tn_w'] = int(post['tn_w'])
if "tn_h" not in post:
post["tn_h"] = 0
else:
post['tn_h'] = int(post['tn_h'])
if "md5" not in post:
post["md5"] = None
if "fsize" not in post:
post["fsize"] = None
if "filename" not in post:
post["filename"] = None
if "tim" not in post:
post["tim"] = None
print(type(post['w']))
new_db.execute(
"""
INSERT INTO bans (action, board, length, now, name, trip, com, time, sub, nsfw, thumb, ext, w, h, tn_w, tn_h, md5, fsize, filename, tim, thumb_path, reason)
VALUES (
:action,
:board,
:length,
:now,
:name,
:trip,
:com,
:time,
:sub,
:nsfw,
:thumb,
:ext,
:w,
:h,
:tn_w,
:tn_h,
:md5,
:fsize,
:filename,
:tim,
:thumb_path,
:reason
)
""",
post,
)