[PonyORM-list] what is the best way to export sqlite database to csv file with pony ?
Alexander Kozlovsky
alexander.kozlovsky at gmail.com
Fri Aug 8 16:16:14 UTC 2014
Hi Vadim!
I'd like to inform you that I just added the to_dict() method, which can be
useful for converting Pony objects to CSV, JSON or any other format. I want
to show you how this method can be used.
At first, let's import a module from Pony ORM examples and get an object
which we want to convert to dictionary:
>>> from pony.orm.examples.presentation import *
>>> populate_database()
>>> s = Student[1]
Now we can convert this object to a dictionary by the following way:
>>> s.to_dict()
{'group': 101, 'name': u'John Smith', 'dob': datetime.date(1991, 3,
20), 'gpa': 3.0, 'tel': '123-456', 'id': 1}
If we want to extract specific fields only, we can specify the list of
attributes:
>>> s.to_dict(['id', 'name', 'group'])
{'group': 101, 'id': 1, 'name': u'John Smith'}
or
>>> s.to_dict("id name group")
{'group': 101, 'id': 1, 'name': u'John Smith'}
By default the related objects are represented by its primary keys, but it
is possible to get full objects by specifying `related_objects=True`. This
way you can convert related objects recursively:
>>> s.to_dict(['id', 'name', 'group'], related_objects=True)
{'group': Group[101], 'id': 1, 'name': u'John Smith'}
By default, collections and lazy attributes (such as BLOBs) are not
included to the to_dict() result. It can be changed by specifying
`with_collections=True` and `with_lazy=True`.
Now I want to show how you can store database data to CSV format using
standard python csv module and new to_dict() method. Let's store the
content of the Student table to the CSV file:
from pony.orm.examples.presentation import Student
import csv
fields = ['id', 'name', 'group', 'gpa', 'tel']
csv_file = open('students.csv', 'w')
writer = csv.DictWriter(csv_file, fields)
writer.writeheader()
for s in Student.select():
writer.writerow(s.to_dict(fields))
csv_file.close()
If you want to export all entity attributes in the same order as they
defined, you can write universal function like this:
def export_to_csv(entity, filename):
fields = [ attr.name for attr in entity._attrs_with_columns_ if not
attr.lazy ]
with open(filename, 'wb') as f:
writer = csv.DictWriter(f, fields)
writer.writeheader()
for obj in entity.select():
writer.writerow(obj.to_dict(fields))
Then you can use this function in the following way:
export_to_csv(Student, 'students.csv')
to_dict() method is available in Pony ORM development version which can be
taken from GitHub:
https://github.com/ponyorm/pony
We plan to release the new version Pony ORM 0.5.2 on Monday which includes
to_dict() method, and you will be able to install it from PyPI using
pip install pony --upgrade
Regards,
Alexander
On Mon, Aug 4, 2014 at 6:53 PM, Вадим Бажов <vadim at ideco.ru> wrote:
> Hi, folks !
> I created and filled an sqlite db with data using Pony ORM. It's clean and
> easy.
> Now i need to be able to convert the database to windows Excell-friendly
> representation for the hiegher autority.
> As i suppose, the csv is the most easy and suitable file format for that
> case.
> So, please, share your experiences with me what is the best way to do such
> an export with Pony? If pony hasn't such export ability (what i didn't
> find), tell me what tools do you usually use for that task?
>
> --
> С уважением,
> Бажов Вадим,
> Инженер отдела технической поддержки,
> Компания Айдеко
> --
> Телефоны: +7 (495) 987-32-70; +7 (495) 662-87-34 (тех. поддержка); +7
> (343) 345-15-75; Факс: +7 (343) 383-75-13
>
> Электронная почта:
> Вопросы по приобретению: sales at ideco.ru
> Технические вопросы: support at ideco.ru
> Партнерство: partners at ideco.ru
> Общие вопросы: info at ideco.ru
>
> Сайт: http://www.ideco.ru/
> Форум: http://www.ideco.ru/forum/
>
> _______________________________________________
> ponyorm-list mailing list
> ponyorm-list at ponyorm.com
> /ponyorm-list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </ponyorm-list/attachments/20140808/66f20765/attachment.html>
More information about the ponyorm-list
mailing list