Есть sqlite3
, включенный в питон. С его помощью вы можете создать базу данных ( в памяти ), добавить в нее строки и выполнить SQL-запросы.
Если вы хотите аккуратную функциональность, подобную ActiveRecord, вы должны добавить внешний ORM, например sqlalchemy . Это отдельная загрузка, хотя
Быстрый пример использования sqlalchemy:
from sqlalchemy import create_engine, Column, String, Integer, MetaData, Table
from sqlalchemy.orm import mapper, create_session
import csv
CSV_FILE = 'foo.csv'
engine = create_engine('sqlite://') # memory-only database
table = None
metadata = MetaData(bind=engine)
with open(CSV_FILE) as f:
# assume first line is header
cf = csv.DictReader(f, delimiter=',')
for row in cf:
if table is None:
# create the table
table = Table('foo', metadata,
Column('id', Integer, primary_key=True),
*(Column(rowname, String()) for rowname in row.keys()))
table.create()
# insert data into the table
table.insert().values(**row).execute()
class CsvTable(object): pass
mapper(CsvTable, table)
session = create_session(bind=engine, autocommit=False, autoflush=True)
Теперь вы можете запросить базу данных, выполнить фильтрацию по любому полю и т. Д.
Предположим, вы запустили код выше на этом CSV:
name,age,nickname
nosklo,32,nosklo
Afila Tun,32,afilatun
Foo Bar,33,baz
Это создаст и заполнит таблицу в памяти полями name
, age
, nickname
. Затем вы можете запросить таблицу:
for r in session.query(CsvTable).filter(CsvTable.age == '32'):
print r.name, r.age, r.nickname
Это автоматически создаст и выполнит запрос SELECT
и вернет правильные строки.
Еще одним преимуществом использования sqlalchemy является то, что, если вы решите использовать другую, более мощную базу данных в будущем, вы можете сделать это практически без изменения кода.