【问题标题】:DatabaseError: file is encrypted or is not a database [duplicate]DatabaseError:文件已加密或不是数据库[重复]
【发布时间】:2015-12-23 12:09:23
【问题描述】:

我正在尝试使用以下代码将我的 .sql 数据库与 python 版本 2.7.9 连接:

import sqlite3
db = sqlite3.connect("c:\\Users\\afsoon\\Desktop\\ch9learning\\sql\\genres.sql")
cursor = db.cursor()
query = """SELECT * FROM mytable where genre='folk'"""
lines = cursor.execute(query)
data = cursor.fetchall()
db.close()

但我发现了这个错误:

lines = cursor.execute(query)
Traceback (most recent call last):

  File "<ipython-input-10-af02982f9f74>", line 1, in <module>
    lines = cursor.execute(query)

DatabaseError: file is encrypted or is not a database
 

我在 windows 上,我有 sqlite3!

ps:这些是我的数据库第一行

-- phpMyAdmin SQL Dump
-- version 4.5.1
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Dec 23, 2015 at 09:29 AM
-- Server version: 10.1.9-MariaDB
-- PHP Version: 5.6.15

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `genres`
--
CREATE DATABASE IF NOT EXISTS `genres` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci;
USE `genres`;

-- --------------------------------------------------------

--
-- Table structure for table `mytable`
--

CREATE TABLE `mytable` (
  `genre` varchar(640) COLLATE utf8_persian_ci DEFAULT NULL,
  `track_id` varchar(50) COLLATE utf8_persian_ci DEFAULT NULL,
  `artist_name` varchar(248) COLLATE utf8_persian_ci DEFAULT NULL,
  `title` varchar(248) COLLATE utf8_persian_ci DEFAULT NULL,
  `keyy` decimal(13,10) DEFAULT NULL,
  `modee` decimal(13,10) DEFAULT NULL,
  `duration` decimal(14,10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;

--
-- Dumping data for table `mytable`

【问题讨论】:

  • 您确定该文件存在吗?路径是否正确?您是否需要路径名中的双斜杠(不是 Python 专家)?
  • 好吧,就像错误所说的那样,该文件似乎不是数据库。你确定是吗?以 .sql 结尾的文件名通常是数据库转储或一系列 SQL 命令,而不是实际的可查询数据库。
  • 是的,我刚刚在 phpmyadmin 中创建了它,然后导出为 sql 格式。如何将其更改为 SQLite 3 数据库????
  • 是的,没错,它不是 SQlite3 数据库!我也不是 python 专家!我可以随时改变吗?

标签: python sqlite spyder


【解决方案1】:

您必须将数据导入 SQLite。由于您的文件是 MySQL 的导出文件,因此可能存在导入问题,您可能需要手动修复某些行。

但基本上你必须创建一个新的 SQLite 数据库文件并导入你的 SQL。为此,您需要 sqlite3 二进制文件。在命令行运行:

sqlite3 your_new_db.sqlite
sqlite> .read genres.sql

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多