-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdb_api.py
More file actions
73 lines (56 loc) · 2.69 KB
/
Copy pathdb_api.py
File metadata and controls
73 lines (56 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from sqlalchemy import create_engine, Column, Integer, String, DateTime, ForeignKey
from sqlalchemy.orm import declarative_base, relationship, sessionmaker
from datetime import datetime
import yaml # type: ignore
with open("config.yaml", "r") as file:
config = yaml.safe_load(file)
db_config = config['database']
db_type = db_config['engine']
if db_type == "sqlite":
# SQLite 使用文件路径
db_path = db_config.get('path', 'rag.db')
engine = create_engine(f"sqlite:///{db_path}", echo=True)
else:
# MySQL 或其他数据库使用 host, port, username, password
host = db_config.get('host', 'localhost')
port = db_config.get('port', 3306)
username = db_config.get('username', 'user')
password = db_config.get('password', 'password')
database = db_config.get('database', 'mydb') # 数据库名
engine = create_engine(
f"{db_type}://{username}:{password}@{host}:{port}/{database}",
echo=True
)
# 创建 Base 类
Base = declarative_base()
# ORM
# 定义 knowledge_database 表
class KnowledgeDatabase(Base):
__tablename__ = 'knowledge_database'
knowledge_id = Column(Integer, primary_key=True, autoincrement=True) # 主键,自动递增
title = Column(String) # 名称
category = Column(String) # 类型
create_dt = Column(DateTime, default=datetime.utcnow) # 创建时间
update_dt = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 更新时间
# 与 KnowledgeDocument 表的关系
documents = relationship("KnowledgeDocument", back_populates="knowledge")
def __str__(self):
return (f"KnowledgeDatabase(knowledge_id={self.knowledge_id}, "
f"title='{self.title}', category='{self.category}', "
f"author_id={self.author_id}, create_dt={self.create_dt}, "
f"update_dt={self.update_dt})")
# 定义 knowledge_document 表
class KnowledgeDocument(Base):
__tablename__ = 'knowledge_document'
document_id = Column(Integer, primary_key=True, autoincrement=True) # 文档主键,自动递增
title = Column(String) # 文档名称
category = Column(String) # 文档类型
knowledge_id = Column(Integer, ForeignKey('knowledge_database.knowledge_id')) # 知识库主键(外键)
file_path = Column(String) # 储存地址
file_type = Column(String) # 数据类型
create_dt = Column(DateTime, default=datetime.utcnow) # 创建时间
update_dt = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 更新时间
# 与 KnowledgeDatabase 表的关系
knowledge = relationship("KnowledgeDatabase", back_populates="documents")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)