Использование CSV в качестве изменяемой базы данных? - PullRequest
4 голосов
/ 03 апреля 2009

Да, это такая глупая ситуация, как кажется. Из-за некоторых чрезвычайно раздражающих ограничений хостинга и неотзывчивой технической поддержки, я должен использовать файл CSV в качестве базы данных.

Хотя я могу использовать MySQL с PHP, я не могу использовать его с бэкэндом Python моей программы из-за проблем с установкой на хосте. Я не могу использовать SQLite с PHP из-за большего количества проблем при установке, но могу использовать его, так как он встроен в Python.

В любом случае, теперь вопрос: возможно ли обновить значения в стиле SQL в базе данных CSV? Или я должен продолжать звонить в службу поддержки?

Ответы [ 12 ]

15 голосов
/ 03 апреля 2009

Не ходите, бегите, чтобы немедленно получить новый хост . Если ваш хост даже не предоставит вам самые простые бесплатные базы данных, пришло время для изменений. В море много рыбы.

По крайней мере, я бы порекомендовал хранилище данных xml, а не csv. Мой блог использует провайдер данных xml, и у меня вообще не было проблем с производительностью.

3 голосов
/ 03 апреля 2009

Взгляните на это: http://www.netpromi.com/kirbybase_python.html

1 голос
/ 03 апреля 2009

«В любом случае, теперь вопрос: возможно ли обновить значения в стиле SQL в базе данных CSV?»

Технически это возможно. Тем не менее, это может быть трудно.

Если PHP и Python пишут файл, вам нужно использовать блокировку на уровне ОС, чтобы они не перезаписывали друг друга. Каждая часть вашей системы должна будет заблокировать файл, переписать его с нуля со всеми обновлениями и разблокировать файл.

Это означает, что PHP и Python должны загрузить весь файл в память перед его перезаписью.

Существует несколько способов обработки блокировки ОС.

  1. Используйте тот же файл и фактически используйте какой-либо модуль блокировки ОС. Оба процесса имеют открытый файл.

  2. Запись во временный файл и переименование. Это означает, что каждая программа должна открывать и читать файл для каждой транзакции. Очень безопасно и надежно. Немного медленно.

Или.

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

1 голос
/ 03 апреля 2009

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

Даже не думайте об использовании CSV, ваши данные будут повреждены и потеряны быстрее, чем вы скажете "s # & t"

1 голос
/ 03 апреля 2009

Я не мог себе представить, что это хорошая идея. Текущий беспорядок, который я унаследовал, записывает важную информацию для выставления счетов в CSV и обновляет ее после завершения проектов. Это ужасно, и тысячи долларов пропускаются в месяц. Для текущих ограничений я бы посоветовал найти лучший хостинг.

1 голос
/ 03 апреля 2009

Продолжайте звонить в службу поддержки.

Хотя вы можете использовать CSV в качестве базы данных, обычно это плохая идея. Вам придется реализовать собственную блокировку, поиск, обновление и быть очень осторожным с тем, как вы записываете его, чтобы убедиться, что оно не будет стерто в случае сбоя питания или другого ненормального отключения. Не будет транзакций, языка запросов, если вы не напишите свой собственный и т. Д.

0 голосов
/ 09 сентября 2009

Не соглашаясь с благородными коллегами, я часто использую DBD :: CSV из Perl. Есть веские причины для этого. Прежде всего, обновление данных стало проще с помощью электронной таблицы. В качестве бонуса, поскольку я использую SQL-запросы, приложение может быть легко обновлено до реального движка базы данных. Имейте в виду, что это были очень маленькие базы данных в однопользовательском приложении.

Итак, перефразируя вопрос: существует ли модуль Python, эквивалентный DBD Perl: CSV

0 голосов
/ 03 апреля 2009

А как насчет postgresql? Мне показалось, что с ним приятно работать, и Python хорошо его поддерживает.

Но я бы действительно искал другого провайдера, если это действительно не вариант.

0 голосов
/ 03 апреля 2009

Это технически возможно. Например, Perl имеет DBD :: CSV , который предоставляет драйвер для запуска запросов SQL к файлу CSV.

Как говорится , почему бы не запустить базу данных SQLite на вашем сервере?

0 голосов
/ 03 апреля 2009

Если я вас правильно понимаю: вам нужен доступ к одной и той же базе данных как с python, так и с php, и вы облажались, потому что вы можете использовать только mysql из php и только sqlite из python?

Не могли бы вы объяснить это? Может быть, вы могли бы использовать xml-rpc или простые http-запросы с xml / json / ..., чтобы заставить php-программу взаимодействовать с программой python (или наоборот?), Чтобы только один из них напрямую обращался к БД.

Если это не так, я не совсем уверен, в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...