From 3a2959d86c206b924e15eb87e5ac962ef909682e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=B0=E5=AE=9A=E4=B8=8D=E7=A6=BB=E6=89=8B?= <12640033+msz-006@user.noreply.gitee.com> Date: Mon, 14 Jul 2025 03:36:06 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0SQLite=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E6=94=AF=E6=8C=81=E6=A0=B8=E5=BF=83=E6=96=87?= =?UTF-8?q?=E4=BB=B6\n\n-=20=E6=96=B0=E5=A2=9E=20async=5Fsqlite=5Fdb.py:?= =?UTF-8?q?=20SQLite=E5=BC=82=E6=AD=A5=E6=95=B0=E6=8D=AE=E5=BA=93=E6=93=8D?= =?UTF-8?q?=E4=BD=9C=E5=B0=81=E8=A3=85\n-=20=E6=96=B0=E5=A2=9E=20schema/sq?= =?UTF-8?q?lite=5Ftables.sql:=20SQLite=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E5=AE=9A=E4=B9=89\n-=20=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?schema/sqlite=5Ftables.db:=20SQLite=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- async_sqlite_db.py | 111 ++++++++ schema/sqlite_tables.db | Bin 0 -> 374293 bytes schema/sqlite_tables.sql | 567 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 678 insertions(+) create mode 100644 async_sqlite_db.py create mode 100644 schema/sqlite_tables.db create mode 100644 schema/sqlite_tables.sql diff --git a/async_sqlite_db.py b/async_sqlite_db.py new file mode 100644 index 0000000..d9409bd --- /dev/null +++ b/async_sqlite_db.py @@ -0,0 +1,111 @@ +# 声明:本代码仅供学习和研究目的使用。使用者应遵守以下原则: +# 1. 不得用于任何商业用途。 +# 2. 使用时应遵守目标平台的使用条款和robots.txt规则。 +# 3. 不得进行大规模爬取或对平台造成运营干扰。 +# 4. 应合理控制请求频率,避免给目标平台带来不必要的负担。 +# 5. 不得用于任何非法或不当的用途。 +# +# 详细许可条款请参阅项目根目录下的LICENSE文件。 +# 使用本代码即表示您同意遵守上述原则和LICENSE中的所有条款。 + + +# -*- coding: utf-8 -*- +# @Author : relakkes@gmail.com +# @Time : 2024/4/6 14:21 +# @Desc : 异步SQLite的增删改查封装 +from typing import Any, Dict, List, Union + +import aiosqlite + + +class AsyncSqliteDB: + def __init__(self, db_path: str) -> None: + self.__db_path = db_path + + async def query(self, sql: str, *args: Union[str, int]) -> List[Dict[str, Any]]: + """ + 从给定的 SQL 中查询记录,返回的是一个列表 + :param sql: 查询的sql + :param args: sql中传递动态参数列表 + :return: + """ + async with aiosqlite.connect(self.__db_path) as conn: + conn.row_factory = aiosqlite.Row + async with conn.execute(sql, args) as cursor: + rows = await cursor.fetchall() + return [dict(row) for row in rows] if rows else [] + + async def get_first(self, sql: str, *args: Union[str, int]) -> Union[Dict[str, Any], None]: + """ + 从给定的 SQL 中查询记录,返回的是符合条件的第一个结果 + :param sql: 查询的sql + :param args:sql中传递动态参数列表 + :return: + """ + async with aiosqlite.connect(self.__db_path) as conn: + conn.row_factory = aiosqlite.Row + async with conn.execute(sql, args) as cursor: + row = await cursor.fetchone() + return dict(row) if row else None + + async def item_to_table(self, table_name: str, item: Dict[str, Any]) -> int: + """ + 表中插入数据 + :param table_name: 表名 + :param item: 一条记录的字典信息 + :return: + """ + fields = list(item.keys()) + values = list(item.values()) + fieldstr = ','.join(fields) + valstr = ','.join(['?'] * len(item)) + sql = f"INSERT INTO {table_name} ({fieldstr}) VALUES({valstr})" + async with aiosqlite.connect(self.__db_path) as conn: + async with conn.execute(sql, values) as cursor: + await conn.commit() + return cursor.lastrowid + + async def update_table(self, table_name: str, updates: Dict[str, Any], field_where: str, + value_where: Union[str, int, float]) -> int: + """ + 更新指定表的记录 + :param table_name: 表名 + :param updates: 需要更新的字段和值的 key - value 映射 + :param field_where: update 语句 where 条件中的字段名 + :param value_where: update 语句 where 条件中的字段值 + :return: + """ + upsets = [] + values = [] + for k, v in updates.items(): + upsets.append(f'{k}=?') + values.append(v) + upsets_str = ','.join(upsets) + values.append(value_where) + sql = f'UPDATE {table_name} SET {upsets_str} WHERE {field_where}=?' + async with aiosqlite.connect(self.__db_path) as conn: + async with conn.execute(sql, values) as cursor: + await conn.commit() + return cursor.rowcount + + async def execute(self, sql: str, *args: Union[str, int]) -> int: + """ + 需要更新、写入等操作的 excute 执行语句 + :param sql: + :param args: + :return: + """ + async with aiosqlite.connect(self.__db_path) as conn: + async with conn.execute(sql, args) as cursor: + await conn.commit() + return cursor.rowcount + + async def executescript(self, sql_script: str) -> None: + """ + 执行SQL脚本,用于初始化数据库表结构 + :param sql_script: SQL脚本内容 + :return: + """ + async with aiosqlite.connect(self.__db_path) as conn: + await conn.executescript(sql_script) + await conn.commit() \ No newline at end of file diff --git a/schema/sqlite_tables.db b/schema/sqlite_tables.db new file mode 100644 index 0000000000000000000000000000000000000000..193ec5edc685ad2af92092d5dc8382f78f60b6de GIT binary patch literal 374293 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

q& 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%0DvytTbC~WzGLi3!VU&XrH3NN^yg1 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 literal 0 HcmV?d00001 diff --git a/schema/sqlite_tables.sql b/schema/sqlite_tables.sql new file mode 100644 index 0000000..dc5adb7 --- /dev/null +++ b/schema/sqlite_tables.sql @@ -0,0 +1,567 @@ +-- SQLite版本的MediaCrawler数据库表结构 +-- 从MySQL tables.sql转换而来,适配SQLite语法 + +-- ---------------------------- +-- Table structure for bilibili_video +-- ---------------------------- +DROP TABLE IF EXISTS bilibili_video; +CREATE TABLE bilibili_video ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + video_id TEXT NOT NULL, + video_type TEXT NOT NULL, + title TEXT DEFAULT NULL, + desc TEXT, + create_time INTEGER NOT NULL, + liked_count TEXT DEFAULT NULL, + disliked_count TEXT DEFAULT NULL, + video_play_count TEXT DEFAULT NULL, + video_favorite_count TEXT DEFAULT NULL, + video_share_count TEXT DEFAULT NULL, + video_coin_count TEXT DEFAULT NULL, + video_danmaku TEXT DEFAULT NULL, + video_comment TEXT DEFAULT NULL, + video_url TEXT DEFAULT NULL, + video_cover_url TEXT DEFAULT NULL, + source_keyword TEXT DEFAULT '' +); + +CREATE INDEX idx_bilibili_vi_video_i_31c36e ON bilibili_video(video_id); +CREATE INDEX idx_bilibili_vi_create__73e0ec ON bilibili_video(create_time); + +-- ---------------------------- +-- Table structure for bilibili_video_comment +-- ---------------------------- +DROP TABLE IF EXISTS bilibili_video_comment; +CREATE TABLE bilibili_video_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + sex TEXT DEFAULT NULL, + sign TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + comment_id TEXT NOT NULL, + video_id TEXT NOT NULL, + content TEXT, + create_time INTEGER NOT NULL, + sub_comment_count TEXT NOT NULL, + parent_comment_id TEXT DEFAULT NULL, + like_count TEXT NOT NULL DEFAULT '0' +); + +CREATE INDEX idx_bilibili_vi_comment_41c34e ON bilibili_video_comment(comment_id); +CREATE INDEX idx_bilibili_vi_video_i_f22873 ON bilibili_video_comment(video_id); + +-- ---------------------------- +-- Table structure for bilibili_up_info +-- ---------------------------- +DROP TABLE IF EXISTS bilibili_up_info; +CREATE TABLE bilibili_up_info ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + sex TEXT DEFAULT NULL, + sign TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + total_fans INTEGER DEFAULT NULL, + total_liked INTEGER DEFAULT NULL, + user_rank INTEGER DEFAULT NULL, + is_official INTEGER DEFAULT NULL +); + +CREATE INDEX idx_bilibili_vi_user_123456 ON bilibili_up_info(user_id); + +-- ---------------------------- +-- Table structure for bilibili_contact_info +-- ---------------------------- +DROP TABLE IF EXISTS bilibili_contact_info; +CREATE TABLE bilibili_contact_info ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + up_id TEXT DEFAULT NULL, + fan_id TEXT DEFAULT NULL, + up_name TEXT DEFAULT NULL, + fan_name TEXT DEFAULT NULL, + up_sign TEXT DEFAULT NULL, + fan_sign TEXT DEFAULT NULL, + up_avatar TEXT DEFAULT NULL, + fan_avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE INDEX idx_bilibili_contact_info_up_id ON bilibili_contact_info(up_id); +CREATE INDEX idx_bilibili_contact_info_fan_id ON bilibili_contact_info(fan_id); + +-- ---------------------------- +-- Table structure for bilibili_up_dynamic +-- ---------------------------- +DROP TABLE IF EXISTS bilibili_up_dynamic; +CREATE TABLE bilibili_up_dynamic ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + dynamic_id TEXT DEFAULT NULL, + user_id TEXT DEFAULT NULL, + user_name TEXT DEFAULT NULL, + text TEXT DEFAULT NULL, + type TEXT DEFAULT NULL, + pub_ts INTEGER DEFAULT NULL, + total_comments INTEGER DEFAULT NULL, + total_forwards INTEGER DEFAULT NULL, + total_liked INTEGER DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE INDEX idx_bilibili_up_dynamic_dynamic_id ON bilibili_up_dynamic(dynamic_id); + +-- ---------------------------- +-- Table structure for douyin_aweme +-- ---------------------------- +DROP TABLE IF EXISTS douyin_aweme; +CREATE TABLE douyin_aweme ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + sec_uid TEXT DEFAULT NULL, + short_user_id TEXT DEFAULT NULL, + user_unique_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + user_signature TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + aweme_id TEXT NOT NULL, + aweme_type TEXT NOT NULL, + title TEXT DEFAULT NULL, + desc TEXT, + create_time INTEGER NOT NULL, + liked_count TEXT DEFAULT NULL, + comment_count TEXT DEFAULT NULL, + share_count TEXT DEFAULT NULL, + collected_count TEXT DEFAULT NULL, + aweme_url TEXT DEFAULT NULL, + cover_url TEXT DEFAULT NULL, + video_download_url TEXT DEFAULT NULL, + source_keyword TEXT DEFAULT '' +); + +CREATE INDEX idx_douyin_awem_aweme_i_6f7bc6 ON douyin_aweme(aweme_id); +CREATE INDEX idx_douyin_awem_create__299dfe ON douyin_aweme(create_time); + +-- ---------------------------- +-- Table structure for douyin_aweme_comment +-- ---------------------------- +DROP TABLE IF EXISTS douyin_aweme_comment; +CREATE TABLE douyin_aweme_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + sec_uid TEXT DEFAULT NULL, + short_user_id TEXT DEFAULT NULL, + user_unique_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + user_signature TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + comment_id TEXT NOT NULL, + aweme_id TEXT NOT NULL, + content TEXT, + create_time INTEGER NOT NULL, + sub_comment_count TEXT NOT NULL, + parent_comment_id TEXT DEFAULT NULL, + like_count TEXT NOT NULL DEFAULT '0', + pictures TEXT NOT NULL DEFAULT '' +); + +CREATE INDEX idx_douyin_awem_comment_fcd7e4 ON douyin_aweme_comment(comment_id); +CREATE INDEX idx_douyin_awem_aweme_i_c50049 ON douyin_aweme_comment(aweme_id); + +-- ---------------------------- +-- Table structure for dy_creator +-- ---------------------------- +DROP TABLE IF EXISTS dy_creator; +CREATE TABLE dy_creator ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + desc TEXT, + gender TEXT DEFAULT NULL, + follows TEXT DEFAULT NULL, + fans TEXT DEFAULT NULL, + interaction TEXT DEFAULT NULL, + videos_count TEXT DEFAULT NULL +); + +-- ---------------------------- +-- Table structure for kuaishou_video +-- ---------------------------- +DROP TABLE IF EXISTS kuaishou_video; +CREATE TABLE kuaishou_video ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + video_id TEXT NOT NULL, + video_type TEXT NOT NULL, + title TEXT DEFAULT NULL, + desc TEXT, + create_time INTEGER NOT NULL, + liked_count TEXT DEFAULT NULL, + viewd_count TEXT DEFAULT NULL, + video_url TEXT DEFAULT NULL, + video_cover_url TEXT DEFAULT NULL, + video_play_url TEXT DEFAULT NULL, + source_keyword TEXT DEFAULT '' +); + +CREATE INDEX idx_kuaishou_vi_video_i_c5c6a6 ON kuaishou_video(video_id); +CREATE INDEX idx_kuaishou_vi_create__a10dee ON kuaishou_video(create_time); + +-- ---------------------------- +-- Table structure for kuaishou_video_comment +-- ---------------------------- +DROP TABLE IF EXISTS kuaishou_video_comment; +CREATE TABLE kuaishou_video_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + comment_id TEXT NOT NULL, + video_id TEXT NOT NULL, + content TEXT, + create_time INTEGER NOT NULL, + sub_comment_count TEXT NOT NULL +); + +CREATE INDEX idx_kuaishou_vi_comment_ed48fa ON kuaishou_video_comment(comment_id); +CREATE INDEX idx_kuaishou_vi_video_i_e50914 ON kuaishou_video_comment(video_id); + +-- ---------------------------- +-- Table structure for weibo_note +-- ---------------------------- +DROP TABLE IF EXISTS weibo_note; +CREATE TABLE weibo_note ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + gender TEXT DEFAULT NULL, + profile_url TEXT DEFAULT NULL, + ip_location TEXT DEFAULT '', + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + note_id TEXT NOT NULL, + content TEXT, + create_time INTEGER NOT NULL, + create_date_time TEXT NOT NULL, + liked_count TEXT DEFAULT NULL, + comments_count TEXT DEFAULT NULL, + shared_count TEXT DEFAULT NULL, + note_url TEXT DEFAULT NULL, + source_keyword TEXT DEFAULT '' +); + +CREATE INDEX idx_weibo_note_note_id_f95b1a ON weibo_note(note_id); +CREATE INDEX idx_weibo_note_create__692709 ON weibo_note(create_time); +CREATE INDEX idx_weibo_note_create__d05ed2 ON weibo_note(create_date_time); + +-- ---------------------------- +-- Table structure for weibo_note_comment +-- ---------------------------- +DROP TABLE IF EXISTS weibo_note_comment; +CREATE TABLE weibo_note_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT DEFAULT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + gender TEXT DEFAULT NULL, + profile_url TEXT DEFAULT NULL, + ip_location TEXT DEFAULT '', + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + comment_id TEXT NOT NULL, + note_id TEXT NOT NULL, + content TEXT, + create_time INTEGER NOT NULL, + create_date_time TEXT NOT NULL, + comment_like_count TEXT NOT NULL, + sub_comment_count TEXT NOT NULL, + parent_comment_id TEXT DEFAULT NULL +); + +CREATE INDEX idx_weibo_note__comment_c7611c ON weibo_note_comment(comment_id); +CREATE INDEX idx_weibo_note__note_id_24f108 ON weibo_note_comment(note_id); +CREATE INDEX idx_weibo_note__create__667fe3 ON weibo_note_comment(create_date_time); + +-- ---------------------------- +-- Table structure for weibo_creator +-- ---------------------------- +DROP TABLE IF EXISTS weibo_creator; +CREATE TABLE weibo_creator ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + desc TEXT, + gender TEXT DEFAULT NULL, + follows TEXT DEFAULT NULL, + fans TEXT DEFAULT NULL, + tag_list TEXT +); + +-- ---------------------------- +-- Table structure for xhs_creator +-- ---------------------------- +DROP TABLE IF EXISTS xhs_creator; +CREATE TABLE xhs_creator ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + desc TEXT, + gender TEXT DEFAULT NULL, + follows TEXT DEFAULT NULL, + fans TEXT DEFAULT NULL, + interaction TEXT DEFAULT NULL, + tag_list TEXT +); + +-- ---------------------------- +-- Table structure for xhs_note +-- ---------------------------- +DROP TABLE IF EXISTS xhs_note; +CREATE TABLE xhs_note ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + note_id TEXT NOT NULL, + type TEXT DEFAULT NULL, + title TEXT DEFAULT NULL, + desc TEXT, + video_url TEXT, + time INTEGER NOT NULL, + last_update_time INTEGER NOT NULL, + liked_count TEXT DEFAULT NULL, + collected_count TEXT DEFAULT NULL, + comment_count TEXT DEFAULT NULL, + share_count TEXT DEFAULT NULL, + image_list TEXT, + tag_list TEXT, + note_url TEXT DEFAULT NULL, + source_keyword TEXT DEFAULT '', + xsec_token TEXT DEFAULT NULL +); + +CREATE INDEX idx_xhs_note_note_id_209457 ON xhs_note(note_id); +CREATE INDEX idx_xhs_note_time_eaa910 ON xhs_note(time); + +-- ---------------------------- +-- Table structure for xhs_note_comment +-- ---------------------------- +DROP TABLE IF EXISTS xhs_note_comment; +CREATE TABLE xhs_note_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + comment_id TEXT NOT NULL, + create_time INTEGER NOT NULL, + note_id TEXT NOT NULL, + content TEXT NOT NULL, + sub_comment_count INTEGER NOT NULL, + pictures TEXT DEFAULT NULL, + parent_comment_id TEXT DEFAULT NULL, + like_count TEXT DEFAULT NULL +); + +CREATE INDEX idx_xhs_note_co_comment_8e8349 ON xhs_note_comment(comment_id); +CREATE INDEX idx_xhs_note_co_create__204f8d ON xhs_note_comment(create_time); + +-- ---------------------------- +-- Table structure for tieba_note +-- ---------------------------- +DROP TABLE IF EXISTS tieba_note; +CREATE TABLE tieba_note ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + note_id TEXT NOT NULL, + title TEXT NOT NULL, + desc TEXT, + note_url TEXT NOT NULL, + publish_time TEXT NOT NULL, + user_link TEXT DEFAULT '', + user_nickname TEXT DEFAULT '', + user_avatar TEXT DEFAULT '', + tieba_id TEXT DEFAULT '', + tieba_name TEXT NOT NULL, + tieba_link TEXT NOT NULL, + total_replay_num INTEGER DEFAULT 0, + total_replay_page INTEGER DEFAULT 0, + ip_location TEXT DEFAULT '', + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + source_keyword TEXT DEFAULT '' +); + +CREATE INDEX idx_tieba_note_note_id ON tieba_note(note_id); +CREATE INDEX idx_tieba_note_publish_time ON tieba_note(publish_time); + +-- ---------------------------- +-- Table structure for tieba_comment +-- ---------------------------- +DROP TABLE IF EXISTS tieba_comment; +CREATE TABLE tieba_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + comment_id TEXT NOT NULL, + parent_comment_id TEXT DEFAULT '', + content TEXT NOT NULL, + user_link TEXT DEFAULT '', + user_nickname TEXT DEFAULT '', + user_avatar TEXT DEFAULT '', + tieba_id TEXT DEFAULT '', + tieba_name TEXT NOT NULL, + tieba_link TEXT NOT NULL, + publish_time TEXT DEFAULT '', + ip_location TEXT DEFAULT '', + sub_comment_count INTEGER DEFAULT 0, + note_id TEXT NOT NULL, + note_url TEXT NOT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE INDEX idx_tieba_comment_comment_id ON tieba_comment(comment_id); +CREATE INDEX idx_tieba_comment_note_id ON tieba_comment(note_id); +CREATE INDEX idx_tieba_comment_publish_time ON tieba_comment(publish_time); + +-- ---------------------------- +-- Table structure for tieba_creator +-- ---------------------------- +DROP TABLE IF EXISTS tieba_creator; +CREATE TABLE tieba_creator ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL, + user_name TEXT NOT NULL, + nickname TEXT DEFAULT NULL, + avatar TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL, + gender TEXT DEFAULT NULL, + follows TEXT DEFAULT NULL, + fans TEXT DEFAULT NULL, + registration_duration TEXT DEFAULT NULL +); + +-- ---------------------------- +-- Table structure for zhihu_content +-- ---------------------------- +DROP TABLE IF EXISTS zhihu_content; +CREATE TABLE zhihu_content ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + content_id TEXT NOT NULL, + content_type TEXT NOT NULL, + content_text TEXT, + content_url TEXT NOT NULL, + question_id TEXT DEFAULT NULL, + title TEXT NOT NULL, + desc TEXT, + created_time TEXT NOT NULL, + updated_time TEXT NOT NULL, + voteup_count INTEGER NOT NULL DEFAULT 0, + comment_count INTEGER NOT NULL DEFAULT 0, + source_keyword TEXT DEFAULT NULL, + user_id TEXT NOT NULL, + user_link TEXT NOT NULL, + user_nickname TEXT NOT NULL, + user_avatar TEXT NOT NULL, + user_url_token TEXT NOT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE INDEX idx_zhihu_content_content_id ON zhihu_content(content_id); +CREATE INDEX idx_zhihu_content_created_time ON zhihu_content(created_time); + +-- ---------------------------- +-- Table structure for zhihu_comment +-- ---------------------------- +DROP TABLE IF EXISTS zhihu_comment; +CREATE TABLE zhihu_comment ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + comment_id TEXT NOT NULL, + parent_comment_id TEXT DEFAULT NULL, + content TEXT NOT NULL, + publish_time TEXT NOT NULL, + ip_location TEXT DEFAULT NULL, + sub_comment_count INTEGER NOT NULL DEFAULT 0, + like_count INTEGER NOT NULL DEFAULT 0, + dislike_count INTEGER NOT NULL DEFAULT 0, + content_id TEXT NOT NULL, + content_type TEXT NOT NULL, + user_id TEXT NOT NULL, + user_link TEXT NOT NULL, + user_nickname TEXT NOT NULL, + user_avatar TEXT NOT NULL, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE INDEX idx_zhihu_comment_comment_id ON zhihu_comment(comment_id); +CREATE INDEX idx_zhihu_comment_content_id ON zhihu_comment(content_id); +CREATE INDEX idx_zhihu_comment_publish_time ON zhihu_comment(publish_time); + +-- ---------------------------- +-- Table structure for zhihu_creator +-- ---------------------------- +DROP TABLE IF EXISTS zhihu_creator; +CREATE TABLE zhihu_creator ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id TEXT NOT NULL UNIQUE, + user_link TEXT NOT NULL, + user_nickname TEXT NOT NULL, + user_avatar TEXT NOT NULL, + url_token TEXT NOT NULL, + gender TEXT DEFAULT NULL, + ip_location TEXT DEFAULT NULL, + follows INTEGER NOT NULL DEFAULT 0, + fans INTEGER NOT NULL DEFAULT 0, + anwser_count INTEGER NOT NULL DEFAULT 0, + video_count INTEGER NOT NULL DEFAULT 0, + question_count INTEGER NOT NULL DEFAULT 0, + article_count INTEGER NOT NULL DEFAULT 0, + column_count INTEGER NOT NULL DEFAULT 0, + get_voteup_count INTEGER NOT NULL DEFAULT 0, + add_ts INTEGER NOT NULL, + last_modify_ts INTEGER NOT NULL +); + +CREATE UNIQUE INDEX idx_zhihu_creator_user_id ON zhihu_creator(user_id); \ No newline at end of file