Любой тип данных может храниться в любом типе столбца, за одним исключением, за исключением того, что столбец, определенный как INTEGER PRIMARY KEY (с или без AUTOINCREMENT ), является псевдонимом rowid столбец, который должен быть целым числом. Если это не целое число, тогда вы получаете ошибку несоответствия типов данных.
Причина в том, что первое значение вашей вставки не является целым числом.
Обычно INTEGER PRIMARY KEY
используется для автоматически генерируемого уникального идентификатора, и значение не указывается, но используется как средство уникальной идентификации строки. При таком использовании значение не предоставляется (или может использоваться значение null), и SQLite генерирует значение (1 для первого, затем, вероятно, 2, затем 3 и т. Д.).
Фактическое лучшее исправление неясно, за исключением того, что вам, вероятно, нужно определить [ChannelStatusResult] по-другому, так что это не INTEGER PRIMARY KEY и, следовательно, столбец не является псевдонимом столбец rowid.
Если вы использовали
c.execute('''CREATE TABLE imbalanced ([ChannelStatusResult] INT PRIMARY KEY,
[Channels] text,
[Channel] text,
[Channel_Type] text,
[Channel_Name] text)''')
Поскольку INTEGER PRIMARY KEY не закодирован, столбец [ChannelStatusResult] не является псевдонимом rowid и, следовательно, может принимать любое значение. Столбец rowid затем скрывается, но все еще может использоваться, например. Вы могли бы использовать SELECT *,rowid FROM any_table
.
Однако, не будучи псевдонимом, rowid может быть изменен с помощью VACUUM , и поэтому нельзя полагаться на то, что он не изменяется (и, следовательно, не должен использоваться для отношений (общий и эффективный способ построение связей между таблицами)).
Обратите внимание, что, хотя INT PRIMARY KEY может решить проблему, это может быть не лучшим решением.