Разработка информационных систем с помощью языка программирования Python
Целые числа
Числа ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:
Операция | Описание |
---|---|
x + y | Сложение |
x — y | Вычитание |
x * y | Умножение |
x / y | Деление |
x // y | Целая часть от деления |
x % y | Остаток от деления |
-x | Смена знака числа |
abs(x) | Модуль числа |
x ** y | Возведение в степень |
Вещественные числа
Вещественные числа поддерживают те же операции, что и целые. Однако вещественные числа неточны, и это может привести к ошибкам.
Помимо стандартных выражений для работы с числами, в составе Python есть несколько полезных модулей. Модуль math предоставляет более сложные математические функции.
Оператор | Описание |
---|---|
math.sin() | Возвращает синус числа |
math.asin() | Возвращает арксинус числа |
math.cos() | Возвращает косинус числа |
math.cos() | Возвращает арккосинус числа |
math.tan() | Возвращает тангенс числа |
math.fabs() | Возвращает модуль числа |
math.sqrt() | Возвращает корень числа |
math.pow() | Возводит число в степень |
Модуль random реализует генератор случайных чисел и функции случайного выбора.
Строки
Строки в Python — упорядоченные последовательности символов, используемые для хранения и представления текстовой информации, поэтому с помощью строк можно работать со всем, что может быть представлено в текстовой форме.
Работа со строками в Python удобна. Существует несколько литералов строк, которые мы сейчас и рассмотрим.
Строки в апострофах и в кавычках — одно и то же. Причина наличия двух вариантов в том, чтобы позволить вставлять в литералы строк символы кавычек или апострофов, не используя экранирование.
Экранированные последовательности позволяют вставить символы, которые сложно ввести с клавиатуры.
Экранированная последовательность | Описание |
---|---|
«\n» | Перевод строки |
«\a» | Звонок |
«\b» | Забой |
«\f» | Перевод страницы |
«\r» | Возврат каретки |
«\t» | Горизонтальная табуляция |
«\v» | Вертикальная табуляция |
«\N |
Идентификатор ID базы данных Юникода |
«\uhhhh» | 16-битовый символ Юникода в 16-ричном представлении |
«\Uhhhh…» | 32-битовый символ Юникода в 32-ричном представлении |
«\xhh» | 16-ричное значение символа |
«\ooo» | 8-ричное значение символа |
«\0» | Символ Null (не является признаком конца строки) |
Главное достоинство строк в тройных кавычках в том, что их можно использовать для записи многострочных блоков текста. Внутри такой строки возможно присутствие кавычек и апострофов, главное, чтобы не было трех кавычек подряд.
Базовые операции
Операция | Описание |
---|---|
S1 + S2 | Конкатенация (сложение строк) |
S * 2 | Повторение строки |
S[i] | Обращение по индексу |
len(S) | Длина строки |
S.find(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения или -1 |
S.index(str, [start],[end]) | Поиск подстроки в строке. Возвращает номер первого вхождения |
S.replace(шаблон, замена) | Замена шаблона |
S.split(символ) | Разбиение строки по разделителю |
S.upper() | Преобразование строки к верхнему регистру |
S.lower() | Преобразование строки к нижнему регистру |
Логические выражения. Ветвления [ править ]
Логические выражения и операторы [ править ]
Говоря на естественном языке (например, русском) мы обозначаем сравнения словами «равно», «больше», «меньше». В языках программирования используются специальные знаки, подобные тем, которые используются в математике: > (больше), < (меньше), >= (больше или равно), <= (меньше или равно), == (равно), != (не равно).
Не путайте операцию присваивания значения переменной, обозначаемую в языке Python одиночным знаком «равно», и операцию сравнения (два знака «равно»). Присваивание и сравнение – разные операции
Логические операторы
A and B — истина, если оба значения A и B истинны.
A or B — истина, если хотя бы одно из значений A и B истинно.
not A — истина, если A ложно
Ветвления [ править ]
Синтаксис инструкции if
Сначала записывается часть if с условным выражением, далее могут следовать одна или более необязательных частей elif, и, наконец, необязательная часть else.
Конструкция с несколькими elif может также служить отличной заменой конструкции switch — case в других языках программирования.
Функции [ править ]
Параметры и аргументы функции [ править ]
Функция в python — объект, принимающий аргументы и возвращающий значение. Обычно функция определяется с помощью инструкции def:
def add(a, b):
Инструкция return говорит, что нужно вернуть значение. В этом случае функция возвращает произведение a и b.
Функция может быть любой сложности и возвращать любые объекты (списки, кортежи и функции)
Функция может и не заканчиваться инструкцией return, при этом функция вернет значение None.
Аргументы функции
Функция может принимать произвольное количество аргументов или не принимать их вовсе. Также распространены функции с произвольным числом аргументов, функции с позиционными и именованными аргументами, обязательными и необязательными.
Локальные и глобальные переменные [ править ]
В программировании особе внимание уделяется концепции о локальных и глобальных переменных, а также связанное с ними представление об областях видимости. Соответственно, локальные переменные видны только в локальной области видимости, которой может выступать отдельно взятая функция. Глобальные переменные видны во всей программе. «Видны» – значит, известны, доступны. К ним можно обратиться по имени и получить связанное с ними значение.
В Python, переменные, на которые только ссылаются внутри функции, считаются глобальными. Если переменной присваивается новое значение где-либо в теле функции, считается, что она локальная, и, если вам нужно, то нужно явно указывать её глобальной.
К глобальной переменной можно обратиться из локальной области видимости. К локальной переменной нельзя обратиться из глобальной области видимости, потому что локальная переменная существует только в момент выполнения тела функции. При выходе из нее, локальные переменные исчезают. Компьютерная память, которая под них отводилась, освобождается. Когда функция будет снова вызвана, локальные переменные будут созданы заново.
К локальной области относятся тела функций. Если, находясь в глобальной области видимости, мы попытаемся обратиться к локальной переменной, то возникнет ошибка.
Структуры данных [ править ]
Списки. Кортежи. Словари [ править ]
Списки
Списки в Python — упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться). Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Можно обработать любой итерируемый объект встроенной функцией list.
Список можно создать и при помощи литерала.
И еще один способ создать список — это генераторы списков. Генератор списков — способ построить новый список, применяя выражение к каждому элементу последовательности. Генераторы списков очень похожи на цикл for.
Методы списков
Метод | Описание |
---|---|
list.append(x) | Добавляет элемент в конец списка |
list.extend(L) | Расширяет список list, добавляя в конец все элементы списка L |
list.insert(i, x) | Вставляет на i-ый элемент значение x |
list.remove(x) | Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует |
list.pop([i]) | Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент |
list.index(x, [start [, end]]) | Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end) |
list.count(x) | Возвращает количество элементов со значением x |
list.sort([key=функция]) | Сортирует список на основе функции |
list.reverse() | Разворачивает список |
list.copy() | Поверхностная копия списка |
list.clear() | Очищает список |
Кортежи
Разница между списком и кортежом
- Кортеж защищен от изменений.
- Меньший размер.
- Возможность использовать кортежи в качестве ключей словаря.
Создать кортеж из итерируемого объекта можно с помощью функции tuple()
Методы кортеж
Все операции над списками, не изменяющие список. Можно также по-разному менять элементы местами и так далее.
Словари
Словари в Python — неупорядоченные коллекции произвольных объектов с доступом по ключу. Их иногда ещё называют ассоциативными массивами или хеш-таблицами.
Создать его можно несколькими способами.
- С помощью литерала
- C помощью функции dict
- C помощью метода fromkeys
- C помощью генераторов словарей, которые очень похожи на генераторы списков
a =
Присвоение по новому ключу расширяет словарь, присвоение по существующему ключу перезаписывает его, а попытка извлечения несуществующего ключа порождает исключение.
Методы словарей
Метод | Описание |
---|---|
dict.clear() | очищает словарь |
dict.copy() | возвращает копию словаря |
dict.get(key[, default]) | возвращает значение ключа, но если его нет, не бросает исключение, а возвращает default (по умолчанию None) |
dict.items() | возвращает пары (ключ, значение) |
dict.keys() | возвращает ключи в словаре |
dict.pop(key[, default]) | удаляет ключ и возвращает значение. Если ключа нет, возвращает default (по умолчанию бросает исключение) |
dict.popitem() | удаляет и возвращает пару (ключ, значение). Если словарь пуст, бросает исключение KeyError |
dict.setdefault(key[, default]) | возвращает значение ключа, но если его нет, не бросает исключение, а создает ключ с значением default (по умолчанию None) |
dict.update([other]) | обновляет словарь, добавляя пары (ключ, значение) из other. Существующие ключи перезаписываются. Возвращает None |
dict.values() | возвращает значения в словаре |
Циклы [ править ]
Цикл while и for [ править ]
Цикл while
While — один из самых универсальных циклов в Python, поэтому довольно медленный. Выполняет тело цикла до тех пор, пока условие цикла истинно:
a = 0
while a < 20:
Результат: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Цикл for
Цикл for сложнее, менее универсальный, но выполняется гораздо быстрее цикла while. Этот цикл проходится по любому итерируемому объекту (например строке или списку), и во время каждого прохода выполняет тело цикла:
for i in ‘I love Python’:
Результат: III lllooovvveee PPPyyyttthhhooonnn
Оператор break
Оператор break досрочно прерывает цикл:
for i in ‘I love Python’:
Результат: III lllooovvv
Язык структурированных запросов SQL [ править ]
Работа с реляционной базой данных [ править ]
Создание таблиц [ править ]
Базовые таблицы создаются оператором CREATE TABLE:
CREATE TABLE <имя таблицы>(<список спецификаций столбцов и ограничений>);
Спецификация столбца включает имя поля и тип данных, которые могут находиться в этом столбце. Некоторые ограничения могут быть заданы не только отдельными спецификациями, но и в спецификации столбца. Примерами могут служить ограничения первичного и внешнего ключей, а также ограничение NOT NULL:
CREATE TABLE Pupil(FirstName varchar(15), Name varchar(10), Telephone integer);
Значение N указывает максимальное число символов, которое могут содержать данные в данном столбце. VARCHAR является переменным типом, это означает, что если мы зададим значение с числом символов меньше N, то записано на диск будет именно заданное количество символов. Альтернативой служит точный строковый тип CHAR; для него отсутствующие символы дополняются пробелами справа, т.е. на диск будет всегда записано N символов.
Если значение N не указано, то по умолчанию подразумевается 1, т.е. один символ.
Заполнение таблиц [ править ]
Как только таблица создана, в нее могут быть помещены данные с помощью оператора INSERT:
INSERT INTO Pupil VALUES (‘Петров’, ‘Николай’, 89995633244), (‘Михеева’, ‘Мария’, 89027856674)
Обновление и удаление данных [ править ]
Оператор UPDATE изменяет имеющиеся данные в таблице. Команда имеет вид:
UPDATE <Имя таблицы>
SET <Имя столбца> = <Выражение для вычисления значения столбца>
WHERE <Предикат>
С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.
Ссылка на «выражение для вычисления значения столбца» может относиться к текущим значениям в изменяемой таблице.
Удаление данных в таблице
Оператор DELETE удаляет строки из таблиц, представлений или курсоров, причем в двух последних случаях действие оператора распространяется на те базовые таблицы, из которых извлекались данные в эти представления или курсоры. Оператор удаления имеет простой синтаксис:
DELETE FROM <Имя таблицы>
WHERE <Предикат>;
Если предложение WHERE отсутствует, удаляются все строки из таблицы. Более быстро эту операцию (удаление всех строк из таблицы) можно в Transact-SQL также выполнить с помощью команды:
TRUNCATE TABLE <Имя таблицы>
Соединение таблиц [ править ]
Целостность базы данных: внешний ключ
Внешний ключ – это ограничение, которое поддерживает согласованное состояние данных между двумя таблицами, обеспечивая так называемую ссылочную целостность. Этот тип целостности означает, что всегда есть возможность получить полную информацию об объекте, распределенную по нескольким таблицам.
Связь между таблицами не является равноправной. В ней всегда есть главная таблица и таблица подчиненная. Связи бывают двух типов: «один к одному» и «один ко многим». Связь «один к одному» означает, что строке главной таблицы соответствует не более одной строки в подчиненной таблице. Связь «один ко многим» означает, что одной строке главной таблицы отвечает любое число строк в подчиненной таблице.
Связь устанавливается посредством равенства значений определенных столбцов в главной и подчиненной таблицах. При этом столбец в подчиненной таблице, который соотносится со столбцом в главной таблице, и называется внешним ключом.
Поскольку главная таблица всегда находится со стороны «один», то столбец, участвующий в связи по внешнему ключу, должен иметь ограничение PRIMARY KEY или UNIQUE. Внешний же ключ задается при создании или изменении структуры подчиненной таблицы при помощи спецификации FOREIGN KEY:
FOREIGN KEY(<Список столбцов 1>) REFERENCES <Имя главной таблицы>(<Список столбцов 2>)
Количество столбцов в списках 1 и 2 должно быть одинаковым, а типы данных этих столбцов должны быть совместимы.
Организация запросов [ править ]
Выборка данных [ править ]
Оператор SELECT
Оператор SELECT осуществляет выборку из базы данных и имеет наиболее сложную структуру среди всех операторов языка SQL. Практически любой пользователь баз данных в состоянии написать простейший оператор SELECT типа:
SELECT * FROM <Имя таблицы>
который осуществляет выборку всех записей из объекта БД табличного типа. При этом столбцы и строки результирующего набора не упорядочены.
Фильтрация данных [ править ]
Следует отметить, что вертикальная выборка может содержать дубликаты строк в том случае, если она не содержит потенциального ключа, однозначно определяющего запись. Если требуется получить только уникальные строки, то можно использовать ключевое слово DISTINCT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>;
Группировка данных
Чтобы упорядочить строки результирующего набора, можно выполнить сортировку по любому количеству полей, указанных в предложении SELECT. Для этого используется предложение ORDER BY список полей, являющееся всегда последним предложением в операторе SELECT. При этом в списке полей могут указываться как имена полей, так и их порядковые позиции в списке предложения SELECT:
SELECT DISTINCT <Имя столбца1>, <Имя столбца2>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;
Сортировку можно проводить по возрастанию (ASC) или по убыванию (DESC).
Сортировку можно выполнять даже по столбцам, отсутствующим в списке SELECT. Естественно, эти столбцы должны присутствовать на выходе предложения FROM:
SELECT <Имя столбца1>
FROM <Имя таблицы>
ORDER BY <Имя столбца2> DESC;
Сложные запросы [ править ]
Синтаксис сложных запросов:
SELECT <Имя поля 1>, <Имя поля 2>, <Имя поля 3>, . FROM <Имя таблицы 1>, <Имя таблицы 1>, <Имя таблицы 3>, . WHERE <предикат 1>, <предикат 1>, <предикат 1>.
Создание и работа с информационной системой [ править ]
Библиотека SQLite [ править ]
SQLite – это автономный, работающий без сервера транзакционный механизм базы данных SQL. Будучи файловой базой данных, она предоставляет хороший набор инструментов для более простой (в сравнении с серверными базами данных) обработки данных. Когда приложение использует SQLite, их связь производится с помощью функциональных и прямых вызовов файлов, содержащих данные, а не какого-то интерфейса, что повышает скорость и производительность операций.
Объект–соединение, получаемый в результате успешного вызова функции connect(), должен иметь следующие методы:
- close() — закрывает соединение с базой данных.
- commit() — завершает транзакцию
- rollback() — откатывает начатую транзакцию (восстанавливает исходное состояние). Закрытие соединения при незавершенной транзакции автоматически производит откат транзакции
- cursor() — возвращает объект–курсор, использующий данное соединение. Если база данных не поддерживает курсоры, модуль сопряжения должен их имитировать.
Под транзакцией понимается группа из одной или нескольких операций, которые изменяют базу данных. Транзакция соответствует логически неделимой операции над базой данных, а частичное выполнение транзакции приводит к нарушению целостности БД. Например, при переводе денег с одного счета на другой операции по уменьшению первого счета и увеличению второго являются транзакцией. Методы commit() и rollback() обозначают начало и конец транзакции в явном виде. Кстати, не все базы данных поддерживают механизм транзакций.
Следует отметить, что в зависимости от реализации DB–API 2.0 модуля, необходимо сохранять ссылку на объект–соединение в продолжение работы курсоров этого соединения. В частности, это означает, что нельзя сразу же получать объект–курсор, не привязывая объект–соединение к некоторому имени. Также нельзя оставлять объект–соединение в локальной переменной, возвращая из функции или метода объект–курсор.
Объект–курсор
Курсор (от англ. cursor — CURrrent Set Of Records, текущий набор записей) служит для работы с результатом запроса. Результатом запроса обычно является одна или несколько прямоугольных таблиц со столбцами–полями и строками–записями. Приложение может читать и обрабатывать полученные таблицы и записи в таблице по одной, поэтому в курсоре хранится информация о текущей таблице и записи. Конкретный курсор в любой момент времени связан с выполнением одной SQL–инструкции.
Атрибуты объекта–курсора тоже определены DB–API:
- arraysize — атрибут, равный количеству записей, возвращаемых методом fetchmany(). По умолчанию равен 1
- callproc(procname[, params]) — вызывает хранимую процедуру procname с параметрами из изменчивой последовательности params. Хранимая процедура может изменить значения некоторых параметров последовательности. Метод может возвратить результат, доступ к которому осуществляется через fetch–методы
- close() — закрывает объект–курсор
- description — этот доступный только для чтения атрибут является последовательностью из семиэлементных последовательностей. Каждая из этих последовательностей содержит информацию, описывающую один столбец результата:
(name, type_code, display_size, internal_size, precision, scale, null_ok) Первые два элемента (имя и тип) обязательны, а вместо остальных (размер для вывода, внутренний размер, точность, масштаб, возможность задания пустого значения) может быть значение None. Этот атрибут может быть равным None для операций, не возвращающих значения
- execute(operation[, parameters]) — исполняет запрос к базе данных или команду СУБД. Параметры (parameters) могут быть представлены в принятой в базе данных нотации в соответствии с атрибутом paramstyle
- executemany(operation, seq_of_parameters) — выполняет серию запросов или команд, подставляя параметры в заданный шаблон. Параметр seq_of_parameters задает последовательность наборов параметров
- fetchall() — возвращает все (или все оставшиеся) записи результата запроса
- fetchmany([size]) — возвращает следующие несколько записей из результатов запроса в виде последовательности последовательностей. Пустая последовательность означает отсутствие данных. Необязательный параметр size указывает количество возвращаемых записей (реально возвращаемых записей может быть меньше). По умолчанию size равен атрибуту arraysize объекта–курсора
- fetchone() — возвращает следующую запись (в виде последовательности) из результата запроса или None при отсутствии данных
- nextset() — переводит курсор к началу следующего набора данных, полученного в результате запроса (при этом часть записей в предыдущем наборе может остаться непрочитанной). Если наборов больше нет, возвращает None. Не все базы данных поддерживают возврат нескольких наборов результатов за одну операцию
- rowcount — количество записей, полученных или затронутых в результате выполнения последнего запроса. В случае отсутствия execute–запросов или невозможности указать количество записей равен –1
- setinputsizes(sizes) — предопределяет области памяти для параметров, используемых в операциях. Аргумент sizes задает последовательность, где каждый элемент соответствует одному входному параметру. Элемент может быть объектом–типом соответствующего параметра или целым числом, задающим длину строки. Он также может иметь значение None, если о размере входного параметра ничего нельзя сказать заранее или он предполагается очень большим. Метод должен быть вызван до execute–методов
- setoutputsize(size[, column]) — устанавливает размер буфера для выходного параметра из столбца с номером column. Если column не задан, метод устанавливает размер для всех больших выходных параметров. Может использоваться, например, для получения больших бинарных объектов (Binary Large Object, BLOB)
Объекты–типы
DB–API 2.0 предусматривает названия для объектов–типов, используемых для описания полей базы данных:
Объект | Тип |
---|---|
TEXT | Строка и символ |
INTEGER | Целое число |
REAL | Вещественное число |
DATETIME | Дата и время |
None | NULL–значение (отсутствующее значение) |
Схематично работа с базой данных может выглядеть примерно так:
Подключение к базе данных (вызов connect() с получением объекта–соединения).
Создание одного или нескольких курсоров (вызов метода объекта–соединения cursor() с получением объекта–курсора).
Исполнение команды или запроса (вызов метода execute() или его вариантов).
Получение результатов запроса (вызов метода fetchone() или его вариантов).
Завершение транзакции или ее откат (вызов метода объекта–соединения commit() или rollback()).
Когда все необходимые транзакции произведены, подключение закрывается вызовом метода close() объекта–соединения.
Графическая библиотека Tkinter [ править ]
Кнопки. Метки. Текстовое поле [ править ]
Button (кнопка)
Самыми важными свойствами виджета класса Button являются text, с помощью которого устанавливается надпись на кнопке, и command для установки действия, то есть того, что будет происходить при нажатии на кнопку. По умолчанию размер кнопки соответствует ширине и высоте текста, однако с помощью свойств width и height эти параметры можно изменить. Cвойства как bg, fg, activebackground и activeforeground определяют соответственно цвет фона и текста, цвет фона и текста во время нажатия.
Label (метка)
Виджет Label просто отображает текст в окне и служит в основном для информационных целей. Свойства метки во многом схожи как и у кнопки. Клик по метке не обрабатывается Tkinter.
Значение шрифта можно передать как строку или как кортеж. Второй вариант удобен, если имя шрифта состоит из двух и более слов. После названия шрифта можно указать размер и стиль.
Entry (однострочное текстовое поле)
Текстовые поля предназначены для ввода информации пользователем. Нередко также для вывода, если предполагается, что текст из них будет скопирован. Текстовые поля как элементы графического интерфейса бывают однострочными и многострочными.
Свойства экземпляров Entry во многом схожи с двумя предыдущими виджетами. А вот методы – нет. Из текстового поля можно взять текст. За это действие отвечает метод get(). В текстовое поле можно вставить текст методом insert(). Также можно удалить текст методом delete().
Метод insert() принимает позицию, в которую надо вставлять текст, и сам текст.
Метод delete() принимает один или два аргумента. В первом случае удаляется один символ в указанной позиции. Во втором – срез между двумя указанными индексами, не включая последний. Если нужно полностью очистить поле, то первым аргументом должен быть 0, вторым – END.
Text (многострочное текстовое поле)
В tkinter многострочное текстовое поле создается от класса Text. По умолчанию его размер равен 80-ти знакоместам по горизонтали и 24-м по вертикали.
Однако эти свойства можно изменять с помощью опций width и height. Есть возможность конфигурировать шрифт, цвета и другое.
Text и Scrollbar (полоса прокрутки)
Если в текстовое поле вводится больше линий текста, чем его высота, то оно само будет прокручиваться вниз. При просмотре прокручивать вверх-вниз можно с помощью колеса мыши и стрелками на клавиатуре. Однако бывает удобнее пользоваться скроллером – полосой прокрутки.
В tkinter скроллеры производятся от класса Scrollbar. Объект-скроллер связывают с виджетом, которому он требуется. Это не обязательно многострочное текстовое поле. Часто полосы прокрутки бывают нужны спискам.
Основные методы у Text такие же как у Entry – get(), insert(), delete(). Однако, если в случае однострочного текстового поля было достаточно указать один индекс элемента при вставке или удалении, то в случае многострочного надо указывать два – номер строки и номер символа в этой строке (другими словами, номер столбца). При этом нумерация строк начинается с единицы, а столбцов – с нуля.
Фрейм. Менеджеры геометрии [ править ]
Frame (фрейм)
Виджет Frame очень важен для процесса группировки и организации других виджетов каким-то дружественным способом. Он работает как контейнер, который отвечает за расположение других виджетов.
Он использует прямоугольные области на экране, чтобы организовать макет и обеспечить заполнение этих виджетов. Фрейм также можно использовать как базовый класс для реализации сложных виджетов.
Вот простой синтаксис для создания этого виджета:
fr = Frame(Master, Option, . )
- master — представляет родительское окно
- Параметры — вот список наиболее часто используемых параметров для этого виджета. Эти параметры можно использовать как пары ключ-значение, разделенные запятыми.
Дополнительные параметры:
Параметр | Описание |
---|---|
bg | Нормальный цвет фона отображается за меткой и индикатором |
bd | Размер границы вокруг индикатора. По умолчанию 2 пикселя |
cursor | Если вы установите для этой опции имя курсора ( стрелка, точка и т. д. ), Курсор мыши изменится на этот шаблон, когда он находится над кнопкой |
height | Вертикальный размер нового кадра |
highlightbackground | Цвет фокуса выделяется, когда рамка не имеет фокуса |
highlightcolor | Цвет, показанный в фокусе, выделяется, когда рамка имеет фокус |
highlightthickness | Толщина фокуса подсветка |
relief | При значении по умолчанию рельеф = FLAT кнопка выбора не выделяется на фоне. Вы можете установить эту опцию на любой другой стиль |
width | Ширина кнопки по умолчанию определяется размером отображаемого изображения или текста. Вы можете установить эту опцию на количество символов, и кнопка-флажок всегда будет иметь место для такого количества символов |
Метод pack
В Tkinter существует три менеджера геометрии – упаковщик, сетка и размещение по координатам. В этом уроке будет рассмотрен первый как наиболее простой и часто используемый.
Упаковщик (packer) вызывается методом pack(), который имеется у всех виджетов-объектов. Мы уже использовали его. Если к элементу интерфейса не применить какой-либо из менеджеров геометрии, то он не отобразится в окне. При этом в одном окне нельзя комбинировать разные менеджеры. Если вы начали размещать виджеты методом pack(), то не надо тут же использовать методы grid() (сетка) и place() (место).
Если в упаковщики не передавать аргументы, то виджеты будут располагаться вертикально, друг над другом. Тот объект, который первым вызовет pack(), будет вверху. Который вторым – под первым, и так далее.
У метода pack() есть параметр side (сторона), который принимает одно из четырех значений-констант tkinter – TOP, BOTTOM, LEFT, RIGHT (верх, низ, лево, право). По умолчанию, когда в pack() не указывается side, его значение равняется TOP. Из-за этого виджеты располагаются вертикально.
Метод grid
Табличный способ размещения предпочтителен из-за его гибкости и удобства, когда дело доходит до разработки относительно сложных интерфейсов. Grid позволяет избежать использования множества фреймов, что неизбежно в случае упаковщика Pack.
При размещении виджетов методом grid() родительский контейнер условно разделяется на ячейки подобно таблице. Адрес каждой ячейки состоит из номера строки и номера столбца. Нумерация начинается с нуля. Ячейки можно объединять как по вертикали, так и по горизонтали.
Размещение виджета в той или иной ячейке задается через аргументы row и column, которым присваиваются соответственно номера строки и столбца. Чтобы объединить ячейки по горизонтали, используется атрибут columnspan, которому присваивается количество объединяемых ячеек. Опция rowspan объединяет ячейки по вертикали.
В этом методе есть атрибут sticky (липкий), который принимает значения направлений сторон света (N, S, W, E, NW, NE, SW, SE). Если, например, указать NW, то виджет прибьет к верхнему левому углу ячейки. Виджеты можно растягивать на весь объем ячейки (sticky=N+S+W+E) или только по одной из осей (N+S или W+E). Эффект от «липучки» заметен, только если виджет меньше ячейки.
Работа с методом bind [ править ]
Метод bind
Метод bind привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:
- название события
- функцию, которая будет вызвана при наступлении события
- третий аргумент (необязательный) — строка «+» — означает, что эта привязка добавляется к уже существующим. Если третий аргумент опущен или равен пустой строке — привязка замещает все другие привязки данного события к виджету.
Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.
Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты:
Артибут | Описание |
---|---|
serial | серийный номер события (все события) |
num | номер кнопки мыши (ButtonPress, ButtonRelease) |
focus | имеет ли окно фокус (Enter, Leave) |
height и width | ширина и высота окна (Configure, Expose) |
keycode | код нажатой клавиши (KeyPress, KeyRelease) |
state | состояние события (для ButtonPress, ButtonRelease, Enter, KeyPress, КeyRelease, Leave, Motion — в виде числа; для Visibility — в виде строки) |
time | время наступления события (все события) |
x и y | координаты мыши |
x_root и y_root | координаты мыши на экране (ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion |
char | набранный на клавиатуре символ (KeyPress, KeyRelease) |
keysym | набранный на клавиатуре символ (KeyPress, KeyRelease) |
keysym_num | набранный на клавиатуре символ в виде числа (KeyPress, KeyRelease) |
type | тип события в виде числа (все события) |
widget | виджет, который получил событие (все события) |
delta | изменение при вращении колеса мыши (MouseWheel) |
Эта функция может возвращать строки «continue» и «break». Если функция возвращает «continue» то Tkinter продолжит обработку других привязок этого события, если «break» — обработка этого события прекращается. Если функция ничего не возвращает (если возвращает None), то обработка событий продолжается.
Глоссарий [ править ]
Аргументы функции — это конкретные значения, которые передаются в функцию при ее вызове.
Ветвление в программировании (оператор ветвления) — конструкция языка программирования, позволяющая выполнить команду или набор команд в случае, если какое-либо логическое выражение истино. Если необходимо выбрать одну из нескольких команд этот оператор обеспечивает выполнение одной из этих команд или набора команд в зависимости от истинности логического выражения.
Выборка данных — выбор данных из таблиц по заданному критерию.
Глобальные переменные — это переменная, которая доступна в любом месте программы, то есть ее область видимости — вся программа, за исключением намеренно закрытых областей.
Кнопка — виртуальная кнопка, созданная при помощи языка программирования, нажатие которой обеспечивает выполнение какой-либо заданной операции. Если выполнение операции на кнопку не задано, то клик по кнопке не обрабатывается.
Кортеж — это определенная последовательность неизменяемых объектов. Кортежи отличаются от списков тем, что элементы в нем нельзя изменять.
Логическое выражение — конструкция языка программирования, которая возвращает в качестве результата значение «истина» или «ложь».
Логические операторы — это операторы, принимающие в качестве аргументов логические значения (ложь или истина), результатом выполнения которых является так же логическое выражение.
Локальные переменные — это переменная, которая доступна только в определенном блоке кода. Область видимости этой переменной начинается в моменте ее объявления и завершается в конце этого блока.
Метка — виджет, отображающий текст в окне и служит в основном для информационных целей. Клик по метке не обрабатывается.
Метод Bind — метод графической библиотеки python, который позволяет связать между собой виджет, событие и действие.
Параметры функции — локальные переменные, которым присваивают значение в момент вызова функции. Параметры указываются в заголовке функции в скобках.
Словари в Python — структура данных, предназначенная для хранения произвольных объектов с доступом по ключу.
Сложный запрос — это запрос, в котором более одного условия, при этом вывод данных такого запроса может быть выполнен более чем из одной таблицы.
Списки в Python — это структура для хранения объектов различных типов, размер которой можно изменять.
Таблица информационной системы — основной тип структуры данных (объект) реляционной модели.
Текстовое поле — виджет, отображающийся как пустое поле для ввода информации пользователем.
Тип данных — класс данных, состоящий из множества возможных значений и операций, которые могут быть применены к этим значениям.
Упаковщик в Python — менеджер геометрии (расположения) в Python, специальный механизм, позволяющий расположить виджеты на окне.
Фрейм (рамка) — вспомогательный виджет, предназначенный для расположения всех виджетов на панели. Фреймы располагают на главном окне, а остальные виджеты — в фрейме.
Цикл for — цикл со счетчиком, в котором некоторая переменная изменяет свое значение от заданного начального значения до конечного значения с заданным шагом, при этом значение этой переменной за каждый проход цикла увеличивается на заданный шаг и выполняется тело цикла.
Цикл while — цикл с постусловием, то есть условие цикла проверяется только после выполнения тела цикла. В таком цикле тело цикла выполняется хотя бы один раз.
Русские Блоги
В предыдущих статьях есть слово курсор, так что же такое курсор?
Давайте объясним: механизм, который может сосредоточить запись на результатах, включая несколько записей данных. Конечно, курсор также может быть использован в качестве указателя. Хахаха, вопрос здесь снова, что такое указатель? : : , , , данные. Затем мы даем имя указатель. Затем для курсора мы также можем просто понять его для хранения результатов запроса SQL.
Хорошо, давайте поговорим о методе курсора:
1. CallProc (name [, params]): используйте указанный параметр для вызова указанного процесса базы данных;
2. Close (): кажется, что этот метод везде, ха -ха
После закрытия курсора этот курсор не может быть использован после закрытия;
3. execute (oper [, params]): выполнить операцию SQL;
4. ExecuteMany (Oper, PSEQ): выполнение операции SQL несколько раз, набор параметров в каждой последовательности;
5. fetchone (): Получить следующую строку в запросе, что приводит к последовательности, если больше нет линии, вернуть нет;
6. fetchmany ([size]): несколько строк в результатах при извлечении, значение размера параметра по умолчанию по умолчанию;
7, fetchall (): извлечено оставшиеся линии последовательности;
8. nextset (): перейти к следующему набору результатов, этот метод не является обязательным;
9. setInputSizes (размеры): используется для прогнозирования заранее определенной области памяти параметра;
10. SetutPutsize (размер [, цвет]): фартук установит большое количество данных и установит длину буфера.
Хорошо, это здесь сегодняшний контент
(Если есть какое -либо нарушение картинки, пожалуйста, свяжитесь с автором, чтобы удалить)
Cursor objects
Объект Cursor представляет собой курсор базы данных , который используется для выполнения операторов SQL и управления контекстом операции выборки. Курсоры создаются с помощью Connection.cursor() или с помощью любого из методов быстрого доступа к соединению .
Объекты курсора являются итераторами , а это означает, что если вы execute() запрос SELECT , вы можете просто выполнить итерацию над курсором, чтобы получить результирующие строки:
Экземпляр Cursor имеет следующие атрибуты и методы.
Выполнить оператор SQL sql . Привяжите значения к оператору, используя заполнители , которые сопоставляются с параметрами последовательности или dict .
execute() выполнит только один оператор SQL. Если вы попытаетесь выполнить с ним более одного оператора, это вызовет ProgrammingError . Используйте executescript() , если вы хотите выполнить несколько операторов SQL одним вызовом.
Если isolation_level не равен None , sql является оператором INSERT , UPDATE , DELETE или REPLACE и открытой транзакции нет, транзакция неявно открывается перед выполнением sql .
Выполнить параметризованный оператор SQL sql для всех последовательностей параметров или отображений, найденных в параметрах последовательности . Также можно использовать итератор , выдающий параметры вместо последовательности. Использует ту же неявную обработку транзакций, что и execute() .
Выполните операторы SQL в sql_script . Если есть ожидающая транзакция, сначала выполняется неявный оператор COMMIT . Никакого другого неявного управления транзакциями не выполняется; любой элемент управления транзакциями должен быть добавлен в sql_script .
sql_script должен быть string .
Если row_factory имеет значение None , вернуть набор результатов запроса следующей строки в виде tuple . В противном случае передайте его фабрике строк и верните результат. Возвратите None , если больше нет доступных данных.
Возвращает следующий набор строк результата запроса в виде list . Возвращает пустой список, если больше нет доступных строк.
Количество строк для выборки за вызов определяется параметром размера . Если размер не указан, размер arraysize определяет количество извлекаемых строк. Если доступно меньше строк, чем size , возвращается столько строк, сколько доступно.
Обратите внимание, что с параметром size связаны соображения производительности . Для оптимальной производительности обычно лучше всего использовать атрибут arraysize. Если используется параметр size , то для него лучше сохранять одно и то же значение от одного fetchmany() к следующему.
Возвращает все (оставшиеся) строки результата запроса в виде list . Возвращает пустой список, если нет доступных строк. Обратите внимание, что атрибут arraysize может повлиять на производительность этой операции.
Закройте курсор сейчас (а не всякий раз, когда __del__ ).
С этого момента курсор будет непригоден для использования; исключение ProgrammingError будет вызвано, если будет предпринята какая-либо операция с курсором.
Требуется DB-API. Ничего не делает в sqlite3 .
Требуется DB-API. Ничего не делает в sqlite3 .
Атрибут чтения/записи, который управляет количеством строк, возвращаемых fetchmany() . Значение по умолчанию равно 1, что означает, что за вызов будет извлечена одна строка.
Атрибут только для чтения, который предоставляет соединение с базой данных SQLite, Connection курсору. Объект Cursor , созданный вызовом con.cursor() , будет иметь атрибут connection , ссылающийся на con :
Доступный только для чтения атрибут, предоставляющий имена столбцов последнего запроса. Чтобы оставаться совместимым с Python DB API, он возвращает 7 кортежей для каждого столбца, где последние шесть элементов каждого кортежа равны None .
Он также установлен для SELECT без каких-либо совпадающих строк.
Атрибут только для чтения, предоставляющий идентификатор последней вставленной строки. Он обновляется только после успешных операторов INSERT или REPLACE с использованием метода execute() . Для других операторов, после executemany() или executescript( executescript() , или если вставка не удалась, значение lastrowid остается неизменным. Начальное значение lastrowid — None .
Вставки в таблицы WITHOUT ROWID не записываются.
Изменено в версии 3.6: Добавлена поддержка оператора REPLACE .
Доступный только для чтения атрибут, предоставляющий количество измененных строк для операторов INSERT , UPDATE , DELETE и REPLACE ; равно -1 для других утверждений, в том числе CTE запросы. Он обновляется только методами execute() и executemany() .
Row objects
Экземпляр Row служит оптимизированной row_factory для объектов Connection .Он поддерживает итерацию, проверку на равенство, len() и сопоставление доступа по имени столбца и индексу.
Два строковых объекта сравниваются равными,если имеют равные столбцы и равные члены.
Возвращает list имен столбцов в виде strings . Сразу после запроса это первый член каждого кортежа в Cursor.description .
Изменено в версии 3.5:Добавлена поддержка нарезки.
Blob objects
Новинка в версии 3.11.
Экземпляр Blob — это файлоподобный объект , который может читать и записывать данные в SQLite. BLOB . Вызовите len(blob) , чтобы получить размер (количество байтов) большого двоичного объекта. Используйте индексы и срезы для прямого доступа к данным большого двоичного объекта.
Используйте большой Blob объект в качестве диспетчера контекста, чтобы убедиться, что дескриптор большого двоичного объекта закрыт после использования.
С этого момента большой двоичный объект будет непригоден для использования. Исключение Error (или подкласса) будет вызвано, если будет предпринята какая-либо дальнейшая операция с большим двоичным объектом.
Прочитать длину байтов данных из большого двоичного объекта в текущей позиции смещения. Если достигнут конец большого двоичного объекта, данные до EOF будет возвращен. Если длина не указана или имеет отрицательное значение, read() будет читать до конца большого двоичного объекта.
Запишите данные в большой двоичный объект с текущим смещением. Эта функция не может изменить длину большого двоичного объекта. Запись за конец большого двоичного объекта вызовет ValueError .
Возвращает текущую позицию доступа к блобу.
Установите текущую позицию доступа к большому двоичному объекту на offset . Аргумент origin по умолчанию имеет значение os.SEEK_SET (абсолютное позиционирование больших двоичных объектов). Другими значениями для источника являются os.SEEK_CUR (поиск относительно текущей позиции) и os.SEEK_END (поиск относительно конца большого двоичного объекта).
PrepareProtocol objects
Единственная цель типа PrepareProtocol — действовать как протокол адаптации в стиле PEP 246 для объектов, которые могут адаптироваться к собственным типам SQLite .
Exceptions
Иерархия исключений определяется DB-API 2.0 ( PEP 249 ).
Это исключение в настоящее время не вызывается модулем sqlite3 , но может быть вызвано приложениями, использующими sqlite3 , например, если определяемая пользователем функция обрезает данные при вставке. Warning является подклассом Exception .
Базовый класс других исключений в этом модуле. Используйте это, чтобы поймать все ошибки с помощью одного единственного except . Error является подклассом Exception .
Если исключение возникло из библиотеки SQLite,то к исключению добавляются следующие два атрибута:
Числовой код ошибки из SQLite API
Новинка в версии 3.11.
Символьное имя числового кода ошибки из SQLite API .
Новинка в версии 3.11.
Возникло исключение из-за неправильного использования низкоуровневого SQLite C API. Другими словами, если возникает это исключение, это, вероятно, указывает на ошибку в модуле sqlite3 . InterfaceError является подклассом Error .
Исключение возникает для ошибок, связанных с базой данных. Это служит базовым исключением для нескольких типов ошибок базы данных. Он поднимается только неявно через специализированные подклассы. DatabaseError является подклассом Error .
Исключение возникает для ошибок, вызванных проблемами с обработанными данными, такими как числовые значения вне допустимого диапазона и слишком длинные строки. DataError является подклассом DatabaseError .
Исключение возникает для ошибок, связанных с работой базы данных и не обязательно находящихся под контролем программиста. Например, путь к базе данных не найден или транзакция не может быть обработана. OperationalError является подклассом DatabaseError .
Исключение возникает при нарушении реляционной целостности базы данных, например, при сбое проверки внешнего ключа. Это подкласс DatabaseError .
Исключение возникает, когда SQLite обнаруживает внутреннюю ошибку. Если это поднято, это может указывать на проблему с библиотекой SQLite во время выполнения. InternalError является подклассом DatabaseError .
Исключение возникает из-за ошибок программирования API sqlite3 , например, при указании неправильного количества привязок к запросу или при попытке работать с закрытым Connection . ProgrammingError — это подкласс DatabaseError .
Возникает исключение, если метод или API базы данных не поддерживаются базовой библиотекой SQLite. Например, установка детерминированного значения True в create_function() , если базовая библиотека SQLite не поддерживает детерминированные функции. NotSupportedError является подклассом DatabaseError .
Доступ к данным с помощью курсоров
Курсор – это объект доступа к данным, который может использоваться как для итерации набора строк в таблице, так и для вставки новых строк в таблицу. Курсоры могут быть трех форм: поиска, вставки или обновления. Как правило, курсоры используются для считывания существующей геометрии и записи новых геометрий.
Каждый тип курсора создается соответствующей функцией ArcPy ( SearchCursor , InsertCursor или UpdateCursor ) в таблице, представлении таблицы, классе объектов или векторном слое. Курсор поиска может использоваться для быстрой выборки строк. Курсор обновления может использоваться для позиционного обновления и удаления строк, тогда как курсор вставки – для вставки строк в таблицу или в класс объекта.
Доступ только для чтения
Обновляет или удаляет строки
Прежние версии:
В ArcGIS 10.1 был добавлен новый модуль доступа к данным ( arcpy.da ). Существовавшие ранее курсоры (которые до сих пор числятся под arcpy ) все еще функционируют и действительны; однако, новые курсоры arcpy.da обладают значительно более высоким быстродействием. В большинстве случаев в справочной системе демонстрируется использование курсоров arcpy.da . Более подробную информацию о классической модели курсора смотрите в таблице ниже.
Доступ только для чтения
Обновляет или удаляет строки
Примечание:
Курсоры учитывают запросы и определяющие запрос представления слоев/таблиц и выборок. Объект курсора содержит в этом случае только те строки, которые бы использовались любыми инструментами геообработки в это время.
Курсоры можно перемещать только в направлении вперед. Их нельзя передвинуть назад и выбрать строки, которые уже были выбраны. Если скрипт требует выполнения многократных проходов данных, то может быть вызван метод курсора reset .
Итерацию курсоров поиска или обновления можно произвести с помощью цикла for . Доступ к следующей строке можно получить явным использованием встроенного метода Python возврата следующей строки next . При использовании метода next для курсора для получения всех строк таблицы, содержащих N строк, скрипт должен выполнить N вызовов метода next . Вызов next за последней выбранной строкой в наборе результатов выдает исключение StopIteration .
Курсоры поиска и обновления также поддерживают выражение with .
Все строки, извлеченные из таблицы, выдаются в виде списка значений поля. Значения будут возвращаться в том же порядке, который предустановлен в аргументе курсора field_names . Свойство курсора fields может также использоваться для подтверждения порядка значений поля.
Объект курсора
SearchCursor , UpdateCursor и InsertCursor создают объект курсора, который может использоваться для итерации записей. Методы объекта курсора, созданного различными функциями курсора, различаются в зависимости от типа созданного курсора.
В таблице ниже представлены методы, поддерживаемые каждым типом курсора:
Сбрасывает курсор в исходное положение
Вставляет строку в таблицу
Обновляет текущую строку
Удаляет строку из таблицы
Сбрасывает курсор в исходное положение
insertRow
Курсор вставки используется для создания новых строк и их вставки. После создания курсора метод insertRow используется для вставки списка или кортежа (tuple) значений, которые формируют новую строку. Любому полю в таблице, не включенному в курсор, назначается значение поля по умолчанию.
updateRow
Метод updateRow используется для обновления строки в текущем положении курсора обновления. После возврата строки из объекта курсора можно требуемым образом изменить строку и вызвать updateRow для передачи измененной строки.
deleteRow
Метод deleteRow используется для удаления строки в текущем положении курсора обновления. После выбора строки необходимо вызвать метод deleteRow для курсора для удаления строки.
Доступ к значениям поля и их установка
Для каждого курсора используемые поля предоставляются списком или кортежем имен полей. При возврате строки из курсора строка возвращается как список значений полей, соответствующих положению указателя.
В примере ниже доступ к имени и количеству населения штата осуществляется по местоположению.
Подсказка:
Несмотря на то, что доступ ко всем полям можно получить с помощью звездочки (*) , делать это обычно не рекомендуется. Чем больше заданно полей, тем медленнее работает курсор. Включение в список только тех полей, которые будут использоваться, улучшает производительность курсора.
Можно также использоваться маркеры (token) в качестве сокращений вместо имен полей. Все таблицы включают поле ObjectID, которое может иметь множество различных имен в зависимости от типа данных. Простым классам объектов обычно (но не всегда) требуется поле геометрии, с именем Shape . Для доступа к полю ObjectID может быть использован токен OID@ , а токен SHAPE@ (возвращающий объект геометрии) может быть использован для доступа к полю геометрии класса объекта без наличия предварительных сведений об имени поля.
Курсор поиска для мультиточечного класса объектов
Дополнительные маркеры геометрии можно использовать для доступа к конкретным сведениям о геометрии. Доступ к полной геометрии более затратен по времени. Если требуются только конкретные свойства геометрии, используйте маркеры, чтобы предоставить быстрый доступ к свойствам геометрии. Например, SHAPE@XY возвратит кортеж координат x,y, представляющий центроиды объектов.
Курсоры и блокировка
Курсоры вставки и обновления соблюдают блокировки таблицы, установленные приложениями ArcGIS. Блокировки предохраняют сложные процессы от изменения одной и той же таблицы одновременно. Существует два типа блокировок: общие и эксклюзивные.
- Общая блокировка применяется в любое время к таблице или набору данных, к которым производится доступ. Несколько общих блокировок может быть создано для таблицы, но если имеется общая блокировка, то создание эксклюзивной блокировки запрещается. Например, создание общей блокировки происходит при отображении класса объектов в ArcMap и просмотре таблицы в ArcCatalog.
- Эксклюзивные блокировки применяются при внесении изменений в таблицу или класс объекта. К примеру, создание эксклюзивной блокировки ArcGIS происходит при редактировании и сохранении класса объекта в ArcMap, изменении схемы таблицы в ArcCatalog или использовании курсора вставки для класса объекта в Python IDE, например, PythonWin.
Курсоры обновления и вставки не могут быть созданы для таблицы или класса объектов при наличии эксклюзивной блокировки для набора данных. Функции UpdateCursor или InsertCursor выдают ошибку из-за эксклюзивной блокировки набора данных. Если эти функции успешно создают курсор, то они используют эксклюзивную блокировку для набора данных так, чтобы два скрипта не могли создать курсор обновления или вставки для того же набора данных.
В Python блокировка сохраняется до тех пор, пока курсор не будет снят. Иначе все другие приложения или скрипты могли бы неоправданно перекрывать доступ к набору данных. Курсор может быть освобожден одним из следующего:
- Включением курсора в выражение with , что гарантирует снятие блокировок вне зависимости от того, удачно или неудачно завершилась работа курсора.
- Вызов reset() курсора
- Завершение работы курсора
- Прямое удаление курсора с помощью выражения Python del
В сеансе редактирования в ArcMap создается общая блокировка данных на время сеанса. Эксклюзивная блокировка применяется при сохранении изменений. Если уже существует эксклюзивная блокировка, то набор данных нельзя редактировать.
Поля Cursors и BLOB
Большой двоичный объект (BLOB) представляет собой некоторую часть данных, хранимую в виде длинной последовательности двоичных чисел. ArcGIS хранит в виде больших двоичных объектов (BLOB) аннотации и объекты-размеры (dimension), а также такие элементы, как изображения, мультимедиа или фрагменты кода. Курсор можно использовать для загрузки или просмотра содержимого поля BLOB.
В Python поля типа BLOB могут содержать строки, bytearray и memoryviews . При чтении полей BLOB возвращается объект memoryview .