База данных на лету с языками сценариев

Использовать malloc. Все проверки типа возврата не являются нулевыми, если это значение равно нулю, то ваша система просто не имеет достаточной памяти, чтобы соответствовать многим значениям.

23
задан tmoisan 18 May 2010 в 19:32
поделиться

6 ответов

Там sqlite3 , включенный в python. С его помощью вы можете создать базу данных ( в памяти ) и добавлять в нее строки, а также выполнять 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

Это создаст и заполнить таблицу в памяти полями имя , возраст , ник . Затем вы можете запросить таблицу:

for r in session.query(CsvTable).filter(CsvTable.age == '32'):
    print r.name, r.age, r.nickname

Это автоматически создаст и запустит запрос SELECT и вернет правильные строки.

Еще одно преимущество использования sqlalchemy состоит в том, что если вы решите использовать в будущем другую, более мощную базу данных, вы можете сделать это практически без изменения кода.

63
ответ дан 28 November 2019 в 22:20
поделиться

Используйте БД в библиотеке, например SQLite . Существуют версии Python и Ruby .

Загрузите ваш CSV-файл в таблицу, там могут быть модули / библиотеки, которые вам тоже могут помочь. Тогда SQL прочь.

4
ответ дан 28 November 2019 в 22:20
поделиться

Вы можете использовать любой язык сценариев для разбора CSV-файла и сохранения данных в SQLite, который просто использует один файл для хранения. Оттуда вы получаете базу данных и можете выполнять запросы к ней.

В качестве альтернативы на windows вы можете настроить источник данных ODBC как CSV-файл. Но это может быть трудно автоматизировать.

3
ответ дан 28 November 2019 в 22:20
поделиться

CSV-файлы не являются базами данных - у них нет индексов - и любое SQL-моделирование, которое вы им навязываете, было бы немногим большим, чем перебор всего этого файла снова и снова.

3
ответ дан 28 November 2019 в 22:20
поделиться

PHP FlatfileDB доступен здесь - очень хороший вариант, если вы создаете веб-приложение

1
ответ дан 28 November 2019 в 22:20
поделиться

Вы смотрели Perl и Text :: CSV и DBI? На CPAN есть много модулей для этого. Вот пример (из ЗДЕСЬ ):

#!/usr/bin/perl
use strict;
use warnings;
use DBI;

# Connect to the database, (the directory containing our csv file(s))

my $dbh = DBI->connect("DBI:CSV:f_dir=.;csv_eol=\n;");

# Associate our csv file with the table name 'prospects'

$dbh->{'csv_tables'}->{'prospects'} = { 'file' => 'prospects.csv'};

# Output the name and contact field from each row

my $sth = $dbh->prepare("SELECT * FROM prospects WHERE name LIKE 'G%'");
$sth->execute();
while (my $row = $sth->fetchrow_hashref) {
     print("name = ", $row->{'Name'}, "  contact = ", $row->{'Contact'}. "\n");
}
$sth->finish();

name = Glenhuntly Pharmacy  contact = Paul
name = Gilmour's Shoes  contact = Ringo

Просто введите perldoc DBI и perldoc Text :: CSV в командной строке, чтобы узнать больше.

4
ответ дан 28 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: