Каковы точные ограничения типов полей peewee с использованием механизма базы данных sqlite?

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

В официальной документации peewee есть много типов перечислены, хотя никакой информации о них не предоставлено. Я бы хотел, чтобы их ограничения были указаны более четко, как это сделал w3.

Сейчас я провожу различные тесты и получаю странные результаты. Как и IntegerField, BigIntegerField и SmallIntegerField на самом деле сопоставляются с одним и тем же типом столбца (какой смысл тогда делать их разными?). CharField сопоставляется с VARCHAR(255), но я могу хранить там большие объемы текста - безопасно ли это или следует рассматривать как непредсказуемое поведение? FixedCharField также позволяет хранить большие тексты, но искажает их без усечения и т. д. Я исследовал документацию sqlite тоже, но там представлено всего 5 основных типов. Хотя я ясно вижу в браузере БД для SQLite и в расширении браузера БД для PyCharm, этот peewee на самом деле использует более широкое сопоставление (скажем, использует VARCHAR, не представленный sqlite) или интерпретирует существующие типы по-своему (скажем, позволяет .save() огромное разнообразие значений в BooleanField, усекая их до 0 или 1).

В лучшем случае я хочу знать точные ограничения и разницу между всеми 25 типами полей при использовании движка sqlite. Тем не менее, было бы неплохо знать только типы полей с наибольшими ограничениями для хранения целых чисел, данных с плавающей запятой, текста и произвольных двоичных данных — в этих обобщенных категориях — что мне выбрать для безопасного хранения наибольшего объема данных?


person username    schedule 23.01.2019    source источник


Ответы (1)


Sqlite имеет всего 5 типов: text, int, real (float), blob и null.

Varchar, char, текст и т. д. — все они рассматриваются как ТЕКСТ. Длина не имеет значения.

Integer, smallint, bigint и т. д. обрабатываются как INT. Sqlite использует 64-битные целые числа.

Прочитайте документацию Sqlite, она все объяснит:

https://www.sqlite.org/datatype3.html

person coleifer    schedule 25.01.2019
comment
Итак, крошка просто сопоставляет свои 25 типов с этими основными 5? Без дополнительной обработки? - person username; 26.01.2019
comment
Да и нет. Да, это единственные типы данных, поддерживаемые базой данных. Peewee имеет специальные типы полей, которые позволяют вам читать и записывать другие типы, такие как дата, время, логическое значение, десятичное число и т. д. - person coleifer; 02.02.2019