swa*_*ala 20 python django orm
我已经将Django ORM用于我的一个网络应用程序,我对它非常满意.现在我有了一个需要数据库的新需求,但Django没有提供任何其他功能.我不想花更多的时间学习像sqlalchemy这样的ORM.
我想我仍然可以
from django.db import models
创建并创建模型,但是manage.py如何不进行迁移和同步?
mat*_*mc3 28
有很多答案适用于旧版本的Django,但Django不断更新,在我的研究中我发现Django 1.8/1.9没有可行的答案,所以我不得不自己动手.这是你如何做到的:
项目结构:
??? data
? ??? __init__.py
? ??? migrations
? ? ??? __init__.py
? ??? models.py
??? main.py
??? manage.py
??? settings.py
Run Code Online (Sandbox Code Playgroud)
该data目录和迁移目录包含空__init__.py文件.示例models.py文件如下所示:
# models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=255)
email = models.EmailField(max_length=255)
Run Code Online (Sandbox Code Playgroud)
该manage.py文件是典型的Django manage.py文件.os.environ.setdefault如果从新django-admin startproject命令复制它,请务必更改设置参数:
#!/usr/bin/env python
# manage.py
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Run Code Online (Sandbox Code Playgroud)
该settings.py文件需要3个设置:DATABASES,INSTALLED_APPS和SECRET_KEY.请参阅不是SQLite的DB的Django文档:
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'sqlite.db',
}
}
INSTALLED_APPS = (
'data',
)
SECRET_KEY = 'REPLACE_ME'
Run Code Online (Sandbox Code Playgroud)
真正的诀窍在于main.py,您可以根据模型进行编码.显然你必须使用wsgi这两行来解决问题:
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)
这是一个示例main.py:
# main.py
# Django specific settings
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
### Have to do this for it to work in 1.9.x!
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
#############
# Your application specific imports
from data.models import *
#Add user
user = User(name="someone", email="someone@example.com")
user.save()
# Application logic
first_user = User.objects.all()[0]
print(first_user.name)
print(first_user.email)
Run Code Online (Sandbox Code Playgroud)
这个项目以及这篇文章是我找到答案的有用起点,我的Django 1.9工作代码的pull请求已经合并,所以你现在可以从masnun的repo中获取代码.如果您知道更好的方法,请提交拉取请求.
小智 8
import os
from django.conf import settings
from django.apps import apps
conf = {
'INSTALLED_APPS': [
'Demo'
],
'DATABASES': {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join('.', 'db.sqlite3'),
}
}
}
settings.configure(**conf)
apps.populate(settings.INSTALLED_APPS)
Run Code Online (Sandbox Code Playgroud)
测试django 1.11.x.
对于最新的Django版本,项目结构为-
|--myproject
|--main.py
|--manage.py
|--myapp
| |--models.py
| |--views.py
| |--admin.py
| |--apps.py
| |--__init__.py
| |--migrations
|--myproject
| |--settings.py
| |--urls.py
| |--wsgi.py
| |--__init__.py
Run Code Online (Sandbox Code Playgroud)
您仍然需要manage.py来运行迁移,main.py是您的独立脚本
# main.py
import os
import django
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
django.setup()
from myapp.models import MyModel
print(MyModel.objects.all()[0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8863 次 |
| 最近记录: |