python 无法下载sqlite3数据库

js4nwp54  于 2023-05-21  发布在  Python
关注(0)|答案(1)|浏览(327)

我写了一个代码replit和它完美的一个文件,我使用。然而,由于我想尝试对数据库做一些我不确定是否有效的事情,我想将数据库复制到另一个replit文件中,所以我试图下载它,然后重新上传到另一个数据库文件中,然后使用以下代码:

import sqlite3
import os
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
tabs = ttk.Notebook(root)
tabs.place(x=0, y=0)
tab1 = ttk.Frame(tabs)
tabs.add(tab1, text = "Workouts display")
tab2 = ttk.Frame(tabs)
tabs.add(tab2, text = "Checkboxes")
root.title("Gym")
root['background']='red'
add = 0
connection = sqlite3.connect("My database.txt")
c = connection.cursor()

dictionary = [["Leg Day",0],["Shoulder Day",1],["Arm Day",2],["Back Day",3]]
scrollbar = tk.Scrollbar(tab1)
myList = tk.Listbox(tab2, yscrollcommand=scrollbar.set)

c.execute('''
SELECT * FROM Workout
''')
root.mainloop()

尝试调用这个新的数据库,我已经上传了这个“备份”文件,这样我就可以参考,如果有什么问题,在我原来的。但是它说数据库磁盘映像格式不正确。我试了好几次,都是同样的消息:“sqlite3.DatabaseError:数据库磁盘映像格式不正确”

w1jd8yoj

w1jd8yoj1#

(最后的解决方法)
你看到两件事的组合,我也可以复制它:
1.您的数据库文件没有扩展名,由于某种原因,浏览器会为其添加.txt扩展名。这不是一个问题,虽然它不是一个真实的的文本文件,它可以工作
1.如果你在replit上点击文件,你会在一个新的标签中看到它,很多红色的NULL-s。无论出于何种原因,查看文件都会影响您的下载方式(即使您关闭了包含此奇怪内容的选项卡)。
基于tutorial创建了以下有趣的测试代码:

import sqlite3

con = sqlite3.connect("tutorial")
cur = con.cursor()

cur.execute("CREATE TABLE movie(title, year, score)")
cur.execute("""
    INSERT INTO movie VALUES
        ('Monty Python and the Holy Grail', 1975, 8.2),
        ('And Now for Something Completely Different', 1971, 7.5)
""")
con.commit()

res = cur.execute("SELECT score FROM movie")
print(res.fetchall())

在原地运行它会产生所需的[(8.2,), (7.5,)]输出,并创建数据库文件tutorial
现在不要点击文件名,而是点击它旁边的垂直...,然后选择下载。结果,您将得到一个8192字节长的tutorial.txt。您可以连接到它,并在本地运行相同的代码,修改文件名并删除CREATE/INSERT/commit()行:

import sqlite3

con = sqlite3.connect("tutorial.txt")
cur = con.cursor()

res = cur.execute("SELECT score FROM movie")
print(res.fetchall())

仍然生成[(8.2,), (7.5,)]
现在点击文件名tutorial,看到很多红色的NULL-s:x1c 0d1x当您看到此消息时,数据库无法正确下载。如果您现在点击下载,您将得到一个8206字节长的非工作tutorial.txt,然后在connect()调用时死亡。文件变长了,但不会太长,这可能意味着换行符被转换为2字节的回车符+换行符序列,@tadman在评论中猜测。
但是这是一个UI错误,replit会将销毁的文件保存在客户端,并提供给您下载。但是服务器上的原始文件仍然有效,您只需删除浏览器中的文件即可:
1.确保带有奇怪视图的数据库文件没有打开(在replit窗口/选项卡内)
1.重新加载replit窗口/选项卡(Ctrl+F5或类似的操作)
1.直接通过...菜单下载数据库文件,小心避免实际查看文件。

相关问题