使用python复制sqlite3数据库,解除database disk is malfored锁定

  1. copy源数据库至本地 sqlite3 source.db
    • .ouput tmp.sql
    • .dump
    • .quit
  2. # sql创建新表 tmp.sql
    PRAGMA foreign_keys=OFF;
    BEGIN TRANSACTION;
    CREATE TABLE oprator (oprator TEXT (6), department TEXT (6));
    CREATE TABLE results (id INTEGER PRIMARY KEY, drawing TEXT, proc, date DATETIME, shift, opra, qc, machine, banch, repnum, remark, item, lsl, usl, yesno, res1, res2, res3, res4, res5);
    COMMIT;
    1. sqlite3 new2.db
    2. .read tmp.sql
    3. .quit
  3. run RepairSQL.py5
  4. # coding=utf-8
    import sqlite3
    import numpy as np
    
    path = r'e:\Qua.db'
    sql = 'SELECT * FROM results'
    sql2 = ("INSERT or IGNORE INTO results (drawing,proc,date,shift,opra,qc,machine,banch,repnum,remark,item,lsl,usl,"
            "yesno,res1,res2,res3,res4,res5) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);")
    '''
    sql2='UPDATE results set id=?'
    sql3='SELECT * FROM results WHERE rowid=?'
    sql4='DELETE FROM results WHERE '
    '''
    con = sqlite3.connect(path)
    cur = con.cursor()
    cur.execute(sql)
    ar = cur.fetchall()
    con.commit()
    con.close()
    # np_ar = np.array(ar)
    # arr = ar[100:]
    # print(arr)
    
    # 事先copy一份new2.db,并清空results数据
    con = sqlite3.connect(r'e:\new2.db')
    con.execute('BEGIN IMMEDIATE')
    cur = con.cursor()
    for a in arr:
        x = a[1:]
        sql = "INSERT or IGNORE INTO results (drawing,proc,date,shift,opra,qc,machine,banch,repnum,remark,item,lsl,usl,yesno,res1,res2,res3,res4,res5) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?);"
        cur.execute(sql, x)
    con.commit()
    con.close()
    CREATE INDEX date_index ON results (
        date ASC
    );
    CREATE INDEX drawing_index ON results (
        drawing ASC
    );
    CREATE INDEX machine_index ON results (
        machine ASC
    );
    CREATE INDEX multi ON results (
        proc ASC,
        drawing ASC,
        date ASC
    );
    CREATE INDEX proc_index ON results (
        proc ASC
    );
    CREATE INDEX ProcMachineDate ON results (
        proc ASC,
        machine ASC,
        date ASC
    );
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个基于PythonSQLite3数据库的简单界面设计方案: ```python import sqlite3 import tkinter as tk # 创建数据库连接 conn = sqlite3.connect('cal.db') c = conn.cursor() # 创建计算记录表 c.execute('''CREATE TABLE IF NOT EXISTS cal_records (id INTEGER PRIMARY KEY AUTOINCREMENT, num1 REAL, num2 REAL, op TEXT, result REAL)''') # 定义计算函数 def calculate(): num1 = float(entry1.get()) num2 = float(entry2.get()) op = listbox.get(listbox.curselection()) if op == '+': result = num1 + num2 elif op == '-': result = num1 - num2 elif op == '*': result = num1 * num2 elif op == '/': result = num1 / num2 else: result = 0.0 result_label.config(text=str(result)) # 存储计算结果到数据库 c.execute('INSERT INTO cal_records (num1, num2, op, result) VALUES (?, ?, ?, ?)', (num1, num2, op, result)) conn.commit() # 定义查询函数 def query(): num1 = float(entry1.get()) c.execute('SELECT * FROM cal_records WHERE num1=?', (num1,)) records = c.fetchall() result_str = '' for record in records: result_str += f'num1: {record[1]}, num2: {record[2]}, op: {record[3]}, result: {record[4]}\n' result_label.config(text=result_str) # 创建界面 root = tk.Tk() root.title('Calculator') label1 = tk.Label(root, text='Number 1:') label1.grid(row=0, column=0) entry1 = tk.Entry(root) entry1.grid(row=0, column=1) label2 = tk.Label(root, text='Number 2:') label2.grid(row=1, column=0) entry2 = tk.Entry(root) entry2.grid(row=1, column=1) listbox = tk.Listbox(root) listbox.grid(row=2, column=0, columnspan=2) listbox.insert(0, '+', '-', '*', '/') calculate_btn = tk.Button(root, text='Calculate', command=calculate) calculate_btn.grid(row=3, column=0) query_btn = tk.Button(root, text='Query', command=query) query_btn.grid(row=3, column=1) result_label = tk.Label(root, text='') result_label.grid(row=4, column=0, columnspan=2) root.mainloop() # 关闭数据库连接 c.close() conn.close() ``` 在上述界面中,我们使用Python的Tkinter库来创建GUI界面。界面中包含两个文本框用于输入两个数值,一个列表框用于选择运算方法,一个计算按钮和一个查询按钮。在点击计算按钮时,程序会根据用户的输入和选择进行相应的数学运算,并将结果显示在界面上。同时,程序会将计算结果存入SQLite3数据库中。在点击查询按钮时,程序会根据用户输入的第一个数值从数据库中查询相应的计算结果,并将结果显示在界面上。 需要注意的是,在使用SQLite3数据库时,我们需要首先建立数据库连接,然后再通过cursor对象执行SQL语句进行数据库操作。最后,务必在程序结束时关闭数据库连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值