Во-первых, не устанавливайте auto_import=True
, так как это актуально только в том случае, если для таблиц существуют файлы метаданных переноса pyDAL * .table, что здесь не будет.
Во-вторых, pyDAL не знает, что таблица уже существует, и, поскольку миграции включены по умолчанию, он пытается создать таблицу. Чтобы предотвратить это, вы можете просто отключить миграцию:
# Applies to all tables.
db = DAL('sqlite://sqlalchemy_example.db', migrate_enabled=False)
или
# Applies to this table only.
db.define_table('person', Field('name'), migrate=False)
Если вы хотите, чтобы pyDAL перенял миграции для будущих изменений в этой таблице, вам следует запустить «поддельную миграцию», которая заставит pyDAL сгенерировать файл метаданных миграции * .table для этой таблицы без фактического запуска миграции. , Для этого временно сделайте следующее изменение:
db.define_table('person', Field('name'), fake_migrate=True)
После того, как все вышеперечисленное оставлено на месте для одного запроса, будет создан файл * .table, и вы можете удалить аргумент fake_migrate=True
.
Наконец, обратите внимание, что pyDAL ожидает, что поле id
будет целочисленным полем первичного ключа с автоинкрементом .