Форум сайта python.su
Всем доброго!
Подскажите пожалуйста, как можно реализовать импорт из текстового файла данных в таблицу sqlite, используя библиотеку sqlite3.
В sqlite'e делаю так:
c:\sqlite> sqlite3 imported.db
sqlite> .separator \t
sqlite> .import ‘base.log’ log
Офлайн
Одной командой в pysqlite нельзя импортировать данные, если я не ошибаюсь. Там вроде (опять же по памяти), не поддерживается команда .import
Можно с помощью apsw
Если использование pysqlite обязательно, то просто пройдитесь CSV-итератором по файлу и скормите это все базе построчно или порциями. За основу можно взять, например, http://mail.python.org/pipermail/python-list/2008-December/161090.html
Офлайн
Честно говоря не нашел как использовать “.import” в apsw. А если использовать отдельный файл с расширением sql, куда вбить separator и import?
Офлайн
С помощью apsw.Shell()
http://apsw.googlecode.com/svn/publish/shell.html
Впрочем, чтобы не задействовать лишние библиотеки, можно воспользоваться и стандартным способом работы со сторонними программами: с помощью Popen.
Офлайн
Пример:
import apsw
sh = apsw.Shell()
sh.process_args()
sh.process_command(“.separator ‘;’”)
sh.process_command(“.import PathToLogFile testtable”)
Отредактировано (Ноя. 9, 2009 20:44:22)
Офлайн
Все нормально получилось. Только почему он не хочет работать с кодировкой cp1251?
Офлайн
Потому что sqlite работает только с Unicode.
Офлайн
Спасибо
Офлайн
Рано наверное обрадовался.
Честно говоря движку sqlite по барабану с какой кодировкой работать. Это я уже выяснил когда закидываю базу данных с кодировкой cp1251 получается работать с sqlite3, но с apsw этого сделать не смог.
Проблема следующая:
таблица базы данных заполнена в кодировке utf-8
есть код:
# -*- coding:utf-8 -*-
import apsw
#uni = u'Топливо'
#rrr = uni.encode('utf-8')
connection=apsw.Connection("reportman.s3db")
cursor=connection.cursor()
for x, y, z, c in cursor.execute("select sum(count), sum(AmBefDisc), sum(AmmountDisc), sum(Ammount) from importdata where GrType = 'Топливо'"):
print x, y, z, c
Traceback (most recent call last):
File "C:\pythonprog\marketcash\calculate.py", line 7, in <module>
for x, y, z, c in cursor.execute("select sum(count), sum(AmBefDisc), sum(AmmountDisc), sum(Ammount) from importdata where GrType = 'Топливо'"):
File "src/cursor.c", line 972, in APSWCursor_execute.sqlite3_prepare
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 99: ordinal not in range(128)
Офлайн
А так:
cursor.execute(“bla-bla-bla where GrType = ?”, (u'Топливо',))
Офлайн