You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

小型Python ERP开发:SQLite托管、备份及预约功能技术问询

针对小型Python ERP开发的核心技术解决方案

阶段1:SQLite数据库托管与自动备份方案

1. SQLite在线托管选择

  • 绝对不要用Github托管SQLite文件:Github是代码仓库而非数据库服务,私有仓库也存在权限配置失误导致数据泄露的风险;而且SQLite是单文件数据库,多用户并发读写时会触发文件锁,严重时会损坏数据库文件,完全不适合在线多用户场景。
  • 推荐带身份验证的轻量托管方案:
    • 用低成本VPS搭建简单服务:在VPS上存放SQLite文件,再用Python写个带API密钥/账号密码验证的小接口(比如Flask服务),ERP程序通过接口读写数据库,避免直接暴露文件;
    • 选择支持SQLite的托管平台:优先选带身份验证机制的平台,确保只有你的ERP程序能访问数据库,杜绝未授权访问。

2. 每周自动备份实现

用Python脚本+系统定时任务就能搞定,核心步骤:

  1. 安全备份数据库:不要直接复制正在运行的SQLite文件,用SQLite内置的VACUUM INTO命令生成干净的备份文件,避免文件损坏:
import sqlite3
import os
from datetime import datetime

def backup_db():
    db_path = "/path/to/your/database.db"
    backup_dir = "/path/to/backup/folder"
    # 生成带时间戳的备份文件名
    backup_name = f"backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}.db"
    backup_path = os.path.join(backup_dir, backup_name)
    
    conn = sqlite3.connect(db_path)
    # 执行VACUUM INTO生成备份
    conn.execute(f"VACUUM INTO '{backup_path}'")
    conn.close()
    
    # 可选:压缩备份文件节省空间
    import zipfile
    with zipfile.ZipFile(f"{backup_path}.zip", 'w', zipfile.ZIP_DEFLATED) as zipf:
        zipf.write(backup_path, os.path.basename(backup_path))
    os.remove(backup_path)
  1. 定时执行备份:
    • Linux/macOS:用cron,编辑定时任务(crontab -e),添加一行:
      0 2 * * 0 /usr/bin/python3 /path/to/backup_script.py
      
      意思是每周日凌晨2点执行备份脚本;
    • Windows:用「任务计划程序」,创建定时任务,指定每周固定时间运行Python脚本;
  2. 备份验证:在脚本末尾添加检查逻辑,比如尝试连接备份文件并查询一条基础数据,确保备份有效,避免生成损坏的备份文件。

阶段3:预约日历功能与自动工时添加

1. 预约日历功能开发

根据你的ERP类型选择方案:

  • 桌面ERP(新手友好):用tkcalendar库快速实现,支持月/日视图、事件添加、选择回调:
from tkinter import Tk
from tkcalendar import Calendar

def on_date_selected(date):
    # 点击日期时触发,比如弹出窗口添加预约
    print(f"Selected date: {date}")

root = Tk()
cal = Calendar(root, selectmode='day', year=2024, month=5, day=1)
cal.pack(pady=20)
cal.bind("<<CalendarSelected>>", lambda e: on_date_selected(cal.get_date()))
root.mainloop()

把预约数据存到SQLite的appointments表(字段:id, customer_id, appointment_time, status),每次打开日历从数据库加载已有预约。

  • Web ERP:用Flask/Django配合前端日历组件,后端提供接口读写预约数据,前端渲染日历视图,适合多用户访问场景。

2. 自动添加90分钟清洁工时

核心是触发逻辑+数据库操作:

  1. 数据库表设计:
    • appointments表:存储预约信息,包含appointment_time(datetime类型)、status(标记是否有效,比如已确认/已取消);
    • timesheet表:存储工时,包含employee_id, work_date, hours, note, appointment_id(关联预约ID);
  2. 自动触发逻辑:
    • 每天凌晨运行脚本,检查当天所有已确认的预约,为每个预约添加90分钟工时:
import sqlite3
from datetime import datetime

def add_cleaning_hours():
    today = datetime.now().date()
    conn = sqlite3.connect("/path/to/your/database.db")
    cursor = conn.cursor()
    
    # 查询当天已确认的预约
    cursor.execute("""
        SELECT id FROM appointments 
        WHERE DATE(appointment_time) = ? AND status = 'confirmed'
    """, (today,))
    appointments = cursor.fetchall()
    
    for appt_id in appointments:
        # 检查是否已经添加过对应工时,避免重复
        cursor.execute("""
            SELECT id FROM timesheet 
            WHERE appointment_id = ? AND work_date = ?
        """, (appt_id[0], today))
        if cursor.fetchone() is None:
            # 插入90分钟(1.5小时)工时记录
            cursor.execute("""
                INSERT INTO timesheet (employee_id, work_date, hours, note, appointment_id)
                VALUES (?, ?, ?, ?, ?)
            """, (1, today, 1.5, "清洁工时", appt_id[0]))
    
    conn.commit()
    conn.close()
  • 用系统定时任务(和备份一样的方式)每天凌晨执行这个脚本,确保当天的预约都能生成对应工时;
  • 额外处理:如果预约取消,要删除对应的工时记录,可以在取消预约的接口/按钮逻辑里添加删除工时的代码。

内容的提问来源于stack exchange,提问作者Oliemar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:45:39