Образ SQLite искажен после второго обращения к БД - PullRequest
0 голосов
/ 27 октября 2018

TL; DR

Я создаю свою БД с SQLite, используя python.Но когда я пытаюсь использовать БД, я могу получить к ней доступ только один раз.Если я пытаюсь получить к нему доступ второй раз, я получаю сообщение об ошибке image is malformed.

Почему я не могу использовать свою базу данных несколько раз? Я дважды проверяю, закрывал ли я БДправильно.Я не понимаю, что происходит.


Я создаю свою БД с помощью этого сценария:

import sqlite3

DATABASE_LOCATION = 'Data/database.db'

# exec(open("Scripts/create_db.py").read())

with sqlite3.connect(DATABASE_LOCATION) as db:
    cursor = db.cursor()

    cursor.execute("""
        CREATE TABLE 'members'(
            'discord_id' TEXT NOT NULL, 
            'reputation' INTEGER NOT NULL,
            PRIMARY KEY('discord_id')
            );
    """)

    cursor.execute("""
        CREATE TABLE 'mission'(
            'mission_id' INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
            'description' TEXT NOT NULL,
            'price' INTEGER NOT NULL,
            'giver' TEXT NOT NULL,
            'receiver' TEXT NOT NULL,
            'complete' INTEGER NOT NULL,
            'create_date' TEXT NOT NULL,
            'complete_date' TEXT,
            FOREIGN KEY('giver') REFERENCES members('discord_id'),
            FOREIGN KEY('receiver') REFERENCES members('discord_id')
            );
    """)

    db.commit()

И затем я использую этот сценарий для проверки:

import sqlite3

DATABASE_LOCATION = 'Data/database.db'


db = sqlite3.connect(DATABASE_LOCATION)
cursor = db.cursor()
cursor.execute('''INSERT INTO members(discord_id, reputation) VALUES(?,?)''', ('1', 1))
db.commit()
db.close()

db = sqlite3.connect(DATABASE_LOCATION)
cursor = db.cursor()
cursor.execute('''INSERT INTO members(discord_id, reputation) VALUES(?,?)''', ('2', 2))
db.commit()
db.close()

db = sqlite3.connect(DATABASE_LOCATION)
cursor = db.cursor()
cursor.execute('''INSERT INTO members(discord_id, reputation) VALUES(?,?)''', ('3', 3))
db.commit()
db.close()

db = sqlite3.connect(DATABASE_LOCATION)
cursor = db.cursor()
cursor.execute('''SELECT discord_id, reputation FROM members WHERE       
discord_id=?''', ('2',))
info = cursor.fetchone()
db.close()

print(info)

Я запускаю скрипт создания: все хорошо.Затем я запускаю тестовый сценарий первый раз: все в порядке, в консоли отображается ('2', 2).

Затем я запускаю тестовый сценарий второй раз и получаю эту ошибку:

Traceback (most recent call last):
  File "python", line 1, in <module>
  File "<string>", line 6, in <module>
sqlite3.DatabaseError: database disk image is malformed

РЕДАКТИРОВАТЬ

Я исправил проблему уникальности (спасибо за указание на это).

Может быть, это потому, что я запускаю это на Repl.it.

Я поместил этот пример здесь: https://repl.it/@NicolasRemond/SociableFluidOrigin Так что вы можете получить к нему доступ и попробовать его.Просто удалите файл базы данных, запустите файл создания с exec(open("create.py").read()) в консоли, а затем другой сценарий exec(open("test.py").read())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...