Я создаю небольшую программу на Python и использую программу ORM для управления моей базой данных Sqlite.Я хочу создать таблицу без первичного ключа, используя peewee.Проблема в том, что peewee добавляет первичный ключ, если я его не указал.После прочтения документации я обнаружил параметр без_уданного, который должен был предотвратить создание этого первичного ключа.Но это не работает.
Вот небольшой пример кода:
#!/usr/bin/python
import peewee
import traceback
db_proxy = peewee.Proxy()
class BaseModel(peewee.Model):
class Meta:
database = db_proxy
class table1(BaseModel):
id = peewee.IntegerField(primary_key=True)
field1 = peewee.CharField()
field2 = peewee.IntegerField()
class table2(BaseModel):
table1_id = peewee.IntegerField()
field1 = peewee.CharField()
class Meta:
without_rowid = True
try:
# create database
db = peewee.SqliteDatabase("test.db")
db_proxy.initialize(db)
db.create_tables([table1, table2])
except Exception as e:
traceback.print_exc(e)
То же, что и безless_rowid, peewee автоматически добавляет первичный ключ id в мою таблицу table2.Вот схема созданной базы данных:
CREATE TABLE IF NOT EXISTS "table1"(
"id" INTEGER NOT NULL PRIMARY KEY,
"field1" VARCHAR(255) NOT NULL,
"field2" INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS "table2"(
"id" INTEGER NOT NULL PRIMARY KEY,
"table1_id" INTEGER NOT NULL,
"field1" VARCHAR(255) NOT NULL
) WITHOUT ROWID;
Вы знаете способ решить эту проблему и разрешить мне создать таблицу без rowid?
ps: если вы спрашиваете, почему я хочу создать таблицу без первичного ключа, это потому, что мне нужно вставить данные из файла CSV.(sqlite3 database.db ".mode csv" ".import file.csv table1").Поскольку у меня в таблице есть ключ AUTO INCREMENT PRIAMRY, мне нужно немного обмануть, импортировав CSV-файл во временную таблицу без первичного ключа, как описано здесь: http://objectiveme.com/populating-a-sqlite-database-using-csv/
Спасибо!:)