[英]Will using the Django ORM in a python library cause trouble?
這些年來,我很喜歡使用Django。 現在我正在為一家正在建立一些共享內部庫的公司工作,以便從我們的數據庫中訪問信息。 現在事情非常草率 - 許多內聯SQL代碼。 一些同事正在努力做一些訪問代碼,我發現這是我習慣於Django開箱即用的東西。 我還聽說Django基本上是模塊化的,因此我可以單獨使用ORM系統。 我知道還有像SqlAlchemy這樣的其他軟件包,但我也聽說Django對普通情況更容易,這可能是我們所需要的。 我也知道Django,不知道SQLAlchemy。
所以,我可以做一個概念證明,如下所示。 這是目錄結構:
+-- example.py
+-- transfer
| +-- __init__.py
| +-- models.py
這是models.py
import django.conf
import django.db.models
django.conf.settings.configure(
DATABASES = ..., # database info
INSTALLED_APPS = ("transfer",),
SECRET_KEY = 'not telling',
)
django.setup()
class TransferItem(django.db.models.Model)
# model info here
example.py
from transfer.models import TransferItem
items = TransferItem.objects.all()
print items
就目前而言,這似乎工作得很好。 但我擔心庫上下文中的引導代碼。 特別:
所以,根本問題是:
有沒有在python庫中使用django ORM的好方法?
編輯:這不是 CLI工具問題的副本。 我知道如何在Web服務器外運行django。 我甚至給出了代碼示例。 我想知道是否有辦法運行django,我本身沒有“apps” - 模型文件可以通過客戶端代碼導入並以任何順序使用。
好的,這是我自己嘗試在經過一些研究后回答這個問題。
我可以在庫中的任何位置為我的模型創建一個基類,如下所示:
from django.db import models
from django.apps import apps
import django.conf
django.conf_settings.configure(
DATABASES = ...
)
apps.populate((__name__,))
class LibModel(models.Model):
class Meta:
abstract = True
app_label = __name__
然后在庫中的任何地方我都可以使用這個基類創建自己的模型。 由於我不依賴於數據庫名稱的“app”,我需要明確說明它們。
class SpecificModel(LibModel):
# fields go here
class Meta(LibModel.Meta):
db_table = "specific_model_table_name"
這讓我擔心必須模擬“app”的結構。 基類中的name屬性為Django提供了所有需要的東西,然后Django放棄了抱怨沒有找到應用程序。 其他模型文件可以在任何他們想要的地方生活。
但是,我仍然有一個可能致命的問題。 Django的初始化本身仍然是單例。 如果我的庫本身是由Django應用程序導入的,它將全部崩潰並燒毀。 我在這個后續問題中要求解決這個問題 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.