Auth
не предназначен для использования за пределами среды web2py. Если вам просто нужен доступ к таблице auth_user
, самым простым вариантом может быть определение его явно в вашем коде. Правильное определение может быть найдено in the book (обратите внимание: вам не нужно будет определять валидаторы, если вы не будете делать какие-либо формы).
Возможно, вы даже можете пропустить явное определение таблицы, если вы можете указать DAL в папку приложения /databases
(если приложение находится на удаленном сервере, возможно, вы можете установить удаленную папку, хотя копия на локальном машина будет намного быстрее). Ваша установка DAL будет выглядеть следующим образом (как описано here):
db = DAL(..., folder='/path/to/app/databases', auto_import=True)
выше будет создавать определения таблиц на основе файлов метаданных миграции в /path/to/app/databases
. Обратите внимание, что в этом случае определения не будут содержать никаких специфических атрибутов web2py, таких как проверки полей (они будут включать только атрибуты, необходимые базе данных, такие как имена полей и типы, а также ограничения базы данных).
Наконец, в зависимости от того, как вы используете свой код, то можно выполнить его в среде приложения (вам потребуется локальная копия приложения):
python web2py.py -S yourapp -M -R /path/to/your/script.py
выше будет создайте среду выполнения web2py, запустите файлы модели приложения (которые будут определять ваши таблицы базы данных, включая таблицы Auth), а затем выполните ваш код в этом контексте. В этом случае вам не нужно беспокоиться о каких-либо определениях таблиц или auto_import
, поскольку определения таблиц будут получены из вашего кода приложения.
Как в сторону, примечание, вы, вероятно, следует отключить миграции при подключении к базе данных приложения удаленно (если вы не хотите, чтобы ваш код в результате изменения DAL внесении в схему базы данных):
db = DAL(..., migrate_enabled=False)
В этом случае нет необходимости в fake_migrate_all=True
- это необходимо только в том случае, если вы включили миграции и вам необходимо создать файлы метаданных миграции. Также обратите внимание, что даже если вам нужно было использовать fake_migrate_all
, вы использовали бы его только один раз для генерации файлов метаданных (в противном случае он будет излишне генерировать один и тот же набор файлов при каждом запуске).
Спасибо, Энтони. В конечном итоге я пошел с опцией определения таблиц явно в сценарии, с отключенной миграцией, но я, конечно, узнал некоторые новые вещи из вашего поста! – Boa