Python ';sqlite3.连接';对象没有属性';备份';
我有一个将数据从Microsoft Access数据库迁移到本地sqlite数据库的程序。它在32位Miniconda安装上运行,而不是我通常使用的64位版本,因为访问版本是32位的。今天早上,我的IT部门移动了anaconda的一些程序文件后,我重新安装了32位的miniconda安装。干净的安装似乎工作正常,但当我尝试备份sqlite数据库时,我收到了一条奇怪的错误消息 调用Python ';sqlite3.连接';对象没有属性';备份';,python,python-3.x,sqlite,anaconda,Python,Python 3.x,Sqlite,Anaconda,我有一个将数据从Microsoft Access数据库迁移到本地sqlite数据库的程序。它在32位Miniconda安装上运行,而不是我通常使用的64位版本,因为访问版本是32位的。今天早上,我的IT部门移动了anaconda的一些程序文件后,我重新安装了32位的miniconda安装。干净的安装似乎工作正常,但当我尝试备份sqlite数据库时,我收到了一条奇怪的错误消息 调用sqlite3.Connection.backup会引发以下错误:“sqlite3.Connection”对象没有属性
sqlite3.Connection.backup
会引发以下错误:“sqlite3.Connection”对象没有属性“backup”
当然,除了sqlite3.Connection
对象有一个名为backup
的属性之外
而且,更奇怪的是,该文件正在备份。我可以看到正在创建一个新文件,但它仍然抛出此错误
下面是导致错误的代码的简化版本:
我有一个名为db
的模块,其中包含用于连接到我拥有的两个数据库的类:
class SQL:
def __init__(self, alt_path=None):
if not alt_path:
pdir = Path("C:\\path\to\default\project\directory")
dbdir = pdir / "Data" / "db" / "SQL"
sql_path = dbdir / "jjp.db"
self.conn = sqlite3.connect(sql_path.as_posix())
else:
self.conn = sqlite3.connect(alt_path.as_posix())
self.cursor = self.conn.cursor()
self.table_names = [
table[0]
for table in self.cursor.execute(
"SELECT name FROM sqlite_master WHERE type = 'table'"
)
]
def backup(self, backup_con):
self.conn.backup(backup_con, pages=0)
backup_con.close()
def close(self):
self.conn.close()
我正在一个名为backup
的模块中导入这些类:
from jjp import db
def create_backup_con(db_type):
today = datetime.today().strftime("%Y%m%d%H%M%S")
if db_type == "sql":
db_file = sql_backup_dir / f"jjp_backup_{today}.db"
conn = sqlite3.connect(db_file.as_posix())
return conn
elif db_type == "access":
db_file = acc_backup_dir / f"jjp_backup_{today}.accdb"
return db_file
def backup_sql():
sql = db.SQL()
bck = create_backup_con("sql")
sql.backup(backup_con=bck)
bck.close()
sql.close()
以下是完整的错误消息输出:
backup.backup_sql()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
----> 1 backup.backup_sql()
c:\users\path\to\backup.py in backup_sql()
38 sql = db.SQL()
39 bck = create_backup_con("sql")
---> 40 sql.backup(backup_con=bck)
41 bck.close()
42 sql.close()
c:\users\path\to\db.py in backup(self, backup_con)
159 """
160
--> 161 self.conn.backup(backup_con, pages=0)
162 backup_con.close()
163
AttributeError: 'sqlite3.Connection' object has no attribute 'backup'
在运行Windows 10的64位计算机上运行python 3.6.10 32位miniconda发行版
运行python 3.6.10
据介绍,Python3.7中添加了对sqlite备份功能的支持。事实上,如果您查看,您将看到缺少对该方法的描述
您必须使用较新的Python版本或找到不同的方法。如果使用sqlite 3.27或更高版本,可能会这样做。谢谢。我想当我在安装之后创建一个新的env时,我只是意外地键入了
python=3.6
,而不是python=3.7
,所以我甚至没有意识到它。