Найти - Пользователи
Полная версия: Импорт лога в sqlite
Начало » Базы данных » Импорт лога в sqlite
1 2
Cover Story
Всем доброго!
Подскажите пожалуйста, как можно реализовать импорт из текстового файла данных в таблицу sqlite, используя библиотеку sqlite3.

В sqlite'e делаю так:

c:\sqlite> sqlite3 imported.db

sqlite> .separator \t
sqlite> .import ‘base.log’ log
Lexander
Одной командой в pysqlite нельзя импортировать данные, если я не ошибаюсь. Там вроде (опять же по памяти), не поддерживается команда .import

Можно с помощью apsw

Если использование pysqlite обязательно, то просто пройдитесь CSV-итератором по файлу и скормите это все базе построчно или порциями. За основу можно взять, например, http://mail.python.org/pipermail/python-list/2008-December/161090.html
Cover Story
Честно говоря не нашел как использовать “.import” в apsw. А если использовать отдельный файл с расширением sql, куда вбить separator и import?
Lexander
С помощью apsw.Shell()
http://apsw.googlecode.com/svn/publish/shell.html

Впрочем, чтобы не задействовать лишние библиотеки, можно воспользоваться и стандартным способом работы со сторонними программами: с помощью Popen.
Lexander
Пример:
import apsw
sh = apsw.Shell()
sh.process_args()
sh.process_command(“.separator ‘;’”)
sh.process_command(“.import PathToLogFile testtable”)
Cover Story
Все нормально получилось. Только почему он не хочет работать с кодировкой cp1251?
Lexander
Потому что sqlite работает только с Unicode.
Cover Story
Спасибо
Cover Story
Рано наверное обрадовался.
Честно говоря движку 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)
Как скормить условие GrType = ‘Топливо’, чтобы apsw его понял?
Lexander
А так:
cursor.execute(“bla-bla-bla where GrType = ?”, (u'Топливо',))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB