init database expect db_node
This commit is contained in:
378
db_manage/create_tables.py
Normal file
378
db_manage/create_tables.py
Normal file
@@ -0,0 +1,378 @@
|
||||
import os
|
||||
import sqlite3
|
||||
|
||||
|
||||
def CreateDBConfigTable(db_path='../src/db_ntfs_info.db', table_name='db_config'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建配置表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
||||
# 创建一个游标对象
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Key TEXT UNIQUE NOT NULL,
|
||||
Value TEXT NOT NULL
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 关闭连接
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBDeviceTable(db_path='../src/db_ntfs_info.db', table_name='db_device'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建设备信息表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
||||
# 创建一个游标对象
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
Path TEXT NOT NULL UNIQUE, -- 添加 UNIQUE 约束
|
||||
Type TEXT NOT NULL CHECK(Type IN ('磁盘', '文件', '文件夹')),
|
||||
Option TEXT
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 关闭连接
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBNodeTable(db_path='../src/db_ntfs_info.db', table_name='db_node'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建节点信息表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
||||
# 创建一个游标对象
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
PathID INTEGER,
|
||||
ParentID INTEGER,
|
||||
NameHash TEXT,
|
||||
PathHash TEXT,
|
||||
ExtendNameID INTEGER,
|
||||
DirLayer INTEGER,
|
||||
GroupID INTEGER,
|
||||
UserID INTEGER,
|
||||
FileCreateTime TEXT,
|
||||
FileModifyTime TEXT,
|
||||
FileAccessTime TEXT,
|
||||
FileAuthTime TEXT,
|
||||
FileSize INTEGER,
|
||||
FileMode INTEGER,
|
||||
FileHash TEXT,
|
||||
ExtentCount INTEGER,
|
||||
extent1_DeviceID INTEGER,
|
||||
extent1_Location INTEGER,
|
||||
extent1_Length INTEGER,
|
||||
extent2_DeviceID INTEGER,
|
||||
extent2_Location INTEGER,
|
||||
extent2_Length INTEGER,
|
||||
extent3_DeviceID INTEGER,
|
||||
extent3_Location INTEGER,
|
||||
extent3_Length INTEGER,
|
||||
extent4_DeviceID INTEGER,
|
||||
extent4_Location INTEGER,
|
||||
extent4_Length INTEGER,
|
||||
|
||||
-- 外键约束(可选)
|
||||
FOREIGN KEY(PathID) REFERENCES path_table(ID),
|
||||
FOREIGN KEY(ExtendNameID) REFERENCES extname_table(ID),
|
||||
FOREIGN KEY(GroupID) REFERENCES groups(ID),
|
||||
FOREIGN KEY(UserID) REFERENCES users(ID)
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 关闭连接
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBUserTable(db_path='../src/db_ntfs_info.db', table_name='db_user'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建用户表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
||||
# 创建一个游标对象
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
UserName TEXT UNIQUE NOT NULL
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 关闭连接
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBGroupTable(db_path='../src/db_ntfs_info.db', table_name='db_group'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建组表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
|
||||
# 创建一个游标对象
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
GroupName TEXT UNIQUE NOT NULL
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 关闭连接
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBExtendSnippetTable(db_path='../src/db_ntfs_info.db', table_name='db_extend_extent'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建扩展片段表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
NodeID INTEGER NOT NULL,
|
||||
ExtentNumber INTEGER NOT NULL,
|
||||
extent_DeviceID INTEGER,
|
||||
extent_Location INTEGER,
|
||||
extent_Length INTEGER,
|
||||
|
||||
-- 外键约束(可选)
|
||||
FOREIGN KEY(NodeID) REFERENCES db_node(ID)
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBPathTable(db_path='../src/db_path.db', table_name='db_path'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建路径信息表,
|
||||
包含 DeviceID 字段,用于标记文件所属设备(磁盘)。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句(包含 DeviceID 外键)
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
-- DeviceID TEXT NOT NULL,
|
||||
Path TEXT NOT NULL,
|
||||
Name TEXT NOT NULL,
|
||||
PathHash TEXT UNIQUE NOT NULL,
|
||||
IsDir INTEGER NOT NULL CHECK(IsDir IN (0, 1)),
|
||||
ParentID INTEGER,
|
||||
ContentSize INTEGER,
|
||||
|
||||
-- 外键约束
|
||||
-- FOREIGN KEY(DeviceID) REFERENCES db_device(ID),
|
||||
FOREIGN KEY(ParentID) REFERENCES {table_name}(ID)
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def CreateDBExtendNameTable(db_path='../src/db_extend_name.db', table_name='db_extend_name'):
|
||||
"""
|
||||
在指定路径下创建 SQLite 数据库,并在其中创建扩展名表。
|
||||
|
||||
:param db_path: str, 数据库文件的路径
|
||||
:param table_name: str, 要创建的表名
|
||||
:return: None
|
||||
"""
|
||||
|
||||
# 确保目录存在
|
||||
directory = os.path.dirname(db_path)
|
||||
if directory and not os.path.exists(directory):
|
||||
os.makedirs(directory)
|
||||
|
||||
# 连接到SQLite数据库(如果文件不存在会自动创建)
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 动态构建创建表的SQL语句
|
||||
create_table_sql = f"""
|
||||
CREATE TABLE IF NOT EXISTS {table_name} (
|
||||
ID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
ExtendName TEXT UNIQUE NOT NULL
|
||||
);
|
||||
"""
|
||||
|
||||
# 执行SQL语句
|
||||
cursor.execute(create_table_sql)
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
print(f"表 [{table_name}] 已在数据库 [{db_path}] 中创建成功")
|
||||
|
||||
|
||||
def main():
|
||||
CreateDBDeviceTable(db_path='../src/db_ntfs_info.db', table_name='db_device')
|
||||
CreateDBConfigTable(db_path='../src/db_ntfs_info.db', table_name='db_config')
|
||||
CreateDBNodeTable(db_path='../src/db_ntfs_info.db', table_name='db_node')
|
||||
CreateDBUserTable(db_path='../src/db_ntfs_info.db', table_name='db_user')
|
||||
CreateDBGroupTable(db_path='../src/db_ntfs_info.db', table_name='db_group')
|
||||
CreateDBExtendSnippetTable(db_path='../src/db_ntfs_info.db', table_name='db_extend_extent')
|
||||
CreateDBPathTable(db_path='../src/db_ntfs_info.db', table_name='db_path')
|
||||
CreateDBExtendNameTable(db_path='../src/db_ntfs_info.db', table_name='db_extend_name')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Reference in New Issue
Block a user