Это работает в Python 2.x.
Для Python 3 смотрите здесь:
import urllib.request
with urllib.request.urlopen("http://www.python.org") as url:
s = url.read()
#I'm guessing this would output the html source code?
print(s)
Я знаю, что MySQL действительно поддерживает ПЕРЕЧИСЛЕНИЕ:
SELECT enum_col+0
"ENUM('0','1','2')
должен избежаться, потому что '0'
имел бы целочисленное значение 1
PostgreSQL поддерживает ПЕРЕЧИСЛЕНИЕ от 8,3 вперед. Для более старых версий можно использовать:
Можно моделировать ПЕРЕЧИСЛЕНИЕ путем выполнения чего-то вроде этого:
CREATE TABLE persons (
person_id int not null primary key,
favourite_colour varchar(255) NOT NULL,
CHECK (favourite_colour IN ('red', 'blue', 'yellow', 'purple'))
);
Вы могли также иметь:
CREATE TABLE colours (
colour_id int not null primary key,
colour varchar(255) not null
)
CREATE TABLE persons (
person_id int not null primary key,
favourite_colour_id integer NOT NULL references colours(colour_id),
);
который сделал бы, чтобы Вы добавили соединение, когда Вы узнаете любимый цвет, но имеет преимущество, что можно добавить цвета просто путем добавления записи в таблицу цветов, и не, что Вы не должны были бы изменять схему каждый раз. Вы также могли добавить атрибут к цвету, как HTML-код или значения RVB.
Вы также могли создать свой собственный тип, который делает перечисление, но я не думаю, что это было бы больше быстрее, чем varchar и CHECK
.
AFAIK, ни IBM DB2, ни IBM Informix Динамические типы ПЕРЕЧИСЛЕНИЯ поддержки Сервера.
В отличие от того, какая сказанная циновка, PostgreSQL действительно поддерживает ПЕРЕЧИСЛЕНИЕ (начиная с версии 8.3, последней):
essais=> CREATE TYPE rcount AS ENUM (
essais(> 'one',
essais(> 'two',
essais(> 'three'
essais(> );
CREATE TYPE
essais=>
essais=> CREATE TABLE dummy (id SERIAL, num rcount);
NOTICE: CREATE TABLE will create implicit sequence "dummy_id_seq" for serial column "dummy.id"
CREATE TABLE
essais=> INSERT INTO dummy (num) VALUES ('one');
INSERT 0 1
essais=> INSERT INTO dummy (num) VALUES ('three');
INSERT 0 1
essais=> INSERT INTO dummy (num) VALUES ('four');
ERROR: invalid input value for enum rcount: "four"
essais=>
essais=> SELECT * FROM dummy WHERE num='three';
id | num
----+-------
2 | three
4 | three
Существуют функции, которые работают конкретно над перечислениями.
Индексация хорошо работает на перечислимых типах.
Согласно руководству, реализация следующие:
Перечисление значений занимает четыре байта на диске. Длина текстовой маркировки перечисления значений ограничена установкой NAMEDATALEN, скомпилированной в PostgreSQL; в стандартных сборках это означает самое большее 63 байта.
Перечислимые маркировки чувствительны к регистру, так же 'счастливы', не то же как 'СЧАСТЛИВЫЙ'. Пробелы в маркировках являются значительными, также.