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())