Ответьте за ограниченную, специфическую ситуацию: если вы хотите удалить файлы при сохранении дерева подпапок, вы можете использовать рекурсивный алгоритм:
import os
def recursively_remove_files(f):
if os.path.isfile(f):
os.unlink(f)
elif os.path.isdir(f):
map(recursively_remove_files, [os.path.join(f,fi) for fi in os.listdir(f)])
recursively_remove_files(my_directory)
Может быть, немного не по теме, но я думаю, что многие нашел бы это полезным
Это зависит от ваших потребностей. Одно из наиболее важных отличий заключается в том, что DataReader будет сохранять открытое соединение с вашей базой данных, пока вы не закончите с ним, в то время как DataSet будет объектом в памяти. Если вы привяжете элемент управления к DataReader, он все еще открыт. Кроме того, DataReader - это прямой подход к чтению данных, которыми нельзя манипулировать. С помощью DataSet вы можете перемещаться вперед и назад и манипулировать данными по своему усмотрению.
Некоторые дополнительные возможности: DataSet могут быть сериализованы и представлены в XML и, следовательно, легко передаваться на другие уровни. DataReaders не могут быть сериализованы.
В дополнение к пункту Марка : вы можете использовать DataSet вообще без базы данных.
Вы можете заполнить его из файла XML или просто из программы. Заполните его строками из одной базы данных, затем разверните и запишите в другую базу данных.
DataSet - это полностью находящееся в памяти представление реляционной схемы. Вам решать, будете ли вы когда-либо использовать его с реальной реляционной базой данных.
По сути, это: «что лучше: ведро или шланг?»
DataSet
здесь ведро; он позволяет вам носить с собой разрозненный набор данных и работать с ним, но вы понесете расходы на перенос ведра (так что лучше держать его в удобном для вас размере).
Считыватель данных - это шланг: он обеспечивает односторонний / однократный доступ к данным, когда они пролетают мимо вас; вам не нужно носить с собой всю доступную воду сразу, но она должна быть подключена к крану / базе данных.
И точно так же, как вы можете наполнить ведро из шланга, вы можете заполнить DataSet
со считывателем данных.
Я пытаюсь подчеркнуть, что они делают разные вещи ...
Я лично не использую DataSet
очень часто - но некоторые люди их любят. Я делаю,
Разные потребности, разные решения.
Как вы сказали, набор данных больше всего похож на набор записей VB6. То есть извлеките нужные данные, передайте их и делайте с ними, что хотите. О, а потом, в конце концов, избавьтесь от этого, когда закончите.
Datareader более ограничен, но он дает НАМНОГО лучшую производительность, когда все, что вам нужно, - это прочитать данные один раз. Например, если вы сами заполняете сетку - т. Е. Извлекаете данные, просматриваете их, для каждой строки заполняете сетку, а затем выкидываете данные - datareader намного лучше, чем набор данных. С другой стороны, даже не пытайтесь использовать datareader, если у вас есть какое-либо намерение обновить данные ...
Итак, да, изучите его - но используйте его только тогда, когда это необходимо. Набор данных обеспечивает большую гибкость.
Чтобы ответить на ваш второй вопрос - да, вам следует узнать о DataReaders. Во всяком случае, чтобы вы понимали, как их использовать.
Я думаю, что в этой ситуации вам лучше использовать DataSet - поскольку вы выполняете привязку данных и все такое (я думаю, что циклы ЦП против человеческих усилий).
Что касается того, какой из них даст лучшую производительность. Это очень сильно зависит от вашей ситуации. Например, если вы редактируете связываемые данные и группируете изменения, вам лучше использовать DataSets