Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 9, 2009 04:26:32

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Всем доброго!
Подскажите пожалуйста, как можно реализовать импорт из текстового файла данных в таблицу sqlite, используя библиотеку sqlite3.

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

c:\sqlite> sqlite3 imported.db

sqlite> .separator \t
sqlite> .import ‘base.log’ log



Python 2.7.3
Pyside 1.1.2

Офлайн

#2 Ноя. 9, 2009 12:54:59

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Одной командой в pysqlite нельзя импортировать данные, если я не ошибаюсь. Там вроде (опять же по памяти), не поддерживается команда .import

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

Если использование pysqlite обязательно, то просто пройдитесь CSV-итератором по файлу и скормите это все базе построчно или порциями. За основу можно взять, например, http://mail.python.org/pipermail/python-list/2008-December/161090.html



Офлайн

#3 Ноя. 9, 2009 14:37:29

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Честно говоря не нашел как использовать “.import” в apsw. А если использовать отдельный файл с расширением sql, куда вбить separator и import?



Python 2.7.3
Pyside 1.1.2

Офлайн

#4 Ноя. 9, 2009 20:17:36

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

С помощью apsw.Shell()
http://apsw.googlecode.com/svn/publish/shell.html

Впрочем, чтобы не задействовать лишние библиотеки, можно воспользоваться и стандартным способом работы со сторонними программами: с помощью Popen.



Офлайн

#5 Ноя. 9, 2009 20:43:48

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Пример:
import apsw
sh = apsw.Shell()
sh.process_args()
sh.process_command(“.separator ‘;’”)
sh.process_command(“.import PathToLogFile testtable”)



Отредактировано (Ноя. 9, 2009 20:44:22)

Офлайн

#6 Ноя. 10, 2009 12:07:06

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Все нормально получилось. Только почему он не хочет работать с кодировкой cp1251?



Python 2.7.3
Pyside 1.1.2

Офлайн

#7 Ноя. 10, 2009 15:33:11

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Потому что sqlite работает только с Unicode.



Офлайн

#8 Ноя. 10, 2009 18:25:57

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Спасибо



Python 2.7.3
Pyside 1.1.2

Офлайн

#9 Ноя. 11, 2009 15:12:09

Cover Story
От:
Зарегистрирован: 2008-08-26
Сообщения: 192
Репутация: +  0  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

Рано наверное обрадовался.
Честно говоря движку 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 его понял?



Python 2.7.3
Pyside 1.1.2

Офлайн

#10 Ноя. 11, 2009 23:38:58

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Импорт лога в sqlite

А так:
cursor.execute(“bla-bla-bla where GrType = ?”, (u'Топливо',))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version