Устройство хранения данных основных данных с Python

Я должен хранить основные данные клиента и автомобили, которые они купили и график платежей этих автомобилей. Эти данные прибывают из GUI, записанного в Python. У меня нет достаточного опыта использовать систему баз данных как sql, таким образом, я хочу хранить свои данные в файле как простой текст. И это не должно быть онлайн.

Чтобы смочь искать и отфильтровать их, сначала я преобразовываю свои данные (списки списков) к строке затем, когда мне нужны данные, повторно преобразовывают в регулярный синтаксис списка Python. Я знаю, что это - путь очень "в лоб", но действительно ли безопасно сделать как этот, или можете Вы совет меня к иначе?

5
задан erkangur 18 July 2010 в 16:07
поделиться

6 ответов

Никогда не безопасно сохранять вашу базу данных в текстовом формате (или используя pickle или что-то еще). Существует риск того, что проблемы при сохранении данных могут вызвать повреждение. Не говоря уже о рисках кражи ваших данных.

По мере роста набора данных может снизиться производительность.

обратите внимание на sqlite (или sqlite3), который меньше по размеру и проще в управлении, чем mysql. Если у вас нет очень маленького набора данных, который поместится в текстовый файл.

P / S: кстати, использовать berkeley db в python просто, и вам не нужно изучать все вещи DB, просто импортируйте bsddb

8
ответ дан 18 December 2019 в 06:34
поделиться

Ответ использовать рассол - это хорошо, но я лично предпочитаю полку. Это позволяет вам сохранять переменные в том же состоянии, в котором они находились между запусками, и я считаю, что его проще использовать, чем напрямую pickle. http://docs.python.org/library/shelve.html

5
ответ дан 18 December 2019 в 06:34
поделиться

Я согласен с другими, что серьезные и важные данные были бы более безопасными в некоторых типах легких баз данных, но также можно сочувствовать желанию сохранить простоту и прозрачность.

Итак, вместо того, чтобы изобретать свой собственный текстовый формат данных, я бы посоветовал вам использовать YAML

Формат удобочитаем, например:

List of things:
    - Alice
    - Bob
    - Evan

Вы загружаете файл следующим образом:

>>> import yaml
>>> file = open('test.yaml', 'r')
>>> list = yaml.load(file)

И список будет выглядеть так:

{'List of things': ['Alice', 'Bob', 'Evan']}

Конечно, вы можете сделать и обратное и сохранить данные в YAML, документация поможет вам в этом.

По крайней мере, еще одна альтернатива для рассмотрения :)

5
ответ дан 18 December 2019 в 06:34
поделиться

Вы можете использовать эту библиотеку для записи объекта в файл http://docs.python.org/library/pickle.html

2
ответ дан 18 December 2019 в 06:34
поделиться

Запись данных в файл - небезопасный способ хранения данных. Лучше использовать простую библиотеку базы данных, например sqlalchemy . Это ORM для удобного использования базы данных ...

1
ответ дан 18 December 2019 в 06:34
поделиться

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

Вот мои простые данные типа «карточный файл» в текстовом файле фрагмент кода с использованием namedtuple, чтобы вы могли получить доступ значения не только по индексу в строке, но и по имени заголовка:

# text based data input with data accessible
# with named fields or indexing
from __future__ import print_function ## Python 3 style printing
from collections import namedtuple
import string

filein = open("sample.dat")

datadict = {}

headerline = filein.readline().lower() ## lowercase field names Python style
## first non-letter and non-number is taken to be the separator
separator = headerline.strip(string.lowercase + string.digits)[0]
print("Separator is '%s'" % separator)

headerline = [field.strip() for field in headerline.split(separator)]
Dataline = namedtuple('Dataline',headerline)
print ('Fields are:',Dataline._fields,'\n')

for data in filein:
    data = [f.strip() for f in data.split(separator)]
    d = Dataline(*data)
    datadict[d.id] = d ## do hash of id values for fast lookup (key field)

## examples based on sample.dat file example
key = '123'
print('Email of record with key %s by field name is: %s' %
      (key, datadict[key].email))

## by number
print('Address of record with key %s by field number is: %s' %
      (key ,datadict[key][3]))

## print the dictionary in separate lines for clarity
for key,value in  datadict.items():
    print('%s: %s' % (key, value))

input('Ready') ## let the output be seen when run directly

""" Output:
Separator is ';'
Fields are: ('id', 'name', 'email', 'homeaddress') 

Email of record with key 123 by field name is: gishi@mymail.com
Address of record with key 123 by field number is: 456 happy st.
345: Dataline(id='345', name='tony', email='tony.veijalainen@somewhere.com', homeaddress='Espoo Finland')
123: Dataline(id='123', name='gishi', email='gishi@mymail.com', homeaddress='456 happy st.')
Ready
"""
0
ответ дан 18 December 2019 в 06:34
поделиться
Другие вопросы по тегам:

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