В моем представлении django после обновления таблицы я помещаю этот код для экспорта этой таблицы в файл csv:
import sqlite3 as sql
import os
import csv
# export Data
print ("Export data into csv file..............")
conn = sql.connect('sqlite3.db') # I tried: db.sqlite3 -> same
cursor=conn.cursor()
cursor.execute("select * from Sport")
with open("heartrateai_data.csv", "w") as csv_file:
csv_writer = csv.writer(csv_file, delimiter = "\t")
csv_writer.writerow([i[0] for i in cursor.description])
csv_writer.writerows(cursor)
dirpath = os.getcwdb()+"/heartrateai_data.csv"
print("Data exported Successfully into {}".format(dirpath))
conn.close()
Но выдает ошибку: Значение исключения: нет такой таблицы: Спорт. Я уверен, что имя таблицы правильное, потому что оно такое же в моем model.py.
Я не уверен, исправит ли он строку с соединением и закрытием соединения. Я новичок в этом. Мой браузер:
Редактировать 2:
Я увидел, что правильный способ записи пути — это 'E:\...' или r'E:...'. Я написал так в своем коде conn = sql.connect(r'E:\Work\django\analysisData\db.sqlite3')
, но у меня такая же ошибка. "Нет такой таблицы: Спорт"
Да, я редактирую пост и пишу строки для импорта. И по первому вопросу: БД у меня есть в большом проекте, а не в той папке, в которой я пишу этот код. (Прикрепил картинку с тем, что у меня в браузере. Код прописан в csvFile/view.py). Я знаю, что это не одно и то же имя в коде с именем БД из браузера. Я попробовал оба, чтобы убедиться, что я не написал что-то плохое.
Проблема в том, что sqlite3
не сработает, если база данных, к которой вы подключаетесь, не существует. Он просто создает файл. Если вы перейдете по пути сценария, вы, вероятно, найдете те, которые он создал. Я считаю, что вы должны указать правильный путь к нему, что-то вроде ../../db.sqlite3
(в зависимости от того, где хранится база данных по отношению к представлению Django). Может быть, показать полную структуру папок как со сценарием, так и с БД.
Если я пишу: conn = sql.connect('E:\Work\django\analysisData\db.sqlite3')
, выдает ошибку: Невозможно открыть файл базы данных. И если я поставлю: conn = sql.connect('E:/Work/django/analysisData/db.sqlite3')
-> нет такой таблицы: Спорт
Я считаю, что есть проблема с разрешением, т.е. у sqlite3 нет разрешения на чтение/запись файла. См. также здесь
Попробуй это
python manage.py makemigrations
python manage.py migrate
это может быть просто ошибка Джанго
Я сделал это. Я удаляю все свои миграции, все, я писал эти команды, но ничего не изменилось.
Как сейчас написано, ваш ответ неясен. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, которая поможет другим понять, как это относится к заданному вопросу. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
После того, как я написал эти строки в своем коде:
con = sql.connect(r'E:\Work\django\analysisData\db.sqlite3')
cursor = con.cursor()
cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
print(cursor.fetchall())
Я увидел, что имя таблицы не такое, как в model.py. Имя таблиц: имя_проекта_ИмяТаблицы. Я изменил имя таблицы, и у меня больше нет этой ошибки.
Чтобы было ясно: это БД, хранящаяся в файле с именем «sqlite3.db» в той же папке, что и скрипт? А
sql
— это псевдоним пакетаsqlite3
?