Python 如何制作脚本以在默认sqlite3数据库django中插入数据
我已经在Django中定义了我的模型和所有内容,如果用户通过我的应用程序进行注册,那么用户就可以在数据库中注册。问题是我有一个包含大量用户的JSON的文件。 我想做一项工作,允许我读取此文件并将所有用户插入我的数据库Python 如何制作脚本以在默认sqlite3数据库django中插入数据,python,django,database,sqlite,Python,Django,Database,Sqlite,我已经在Django中定义了我的模型和所有内容,如果用户通过我的应用程序进行注册,那么用户就可以在数据库中注册。问题是我有一个包含大量用户的JSON的文件。 我想做一项工作,允许我读取此文件并将所有用户插入我的数据库 最好的方法是什么?如何在不使用Django的情况下连接到数据库?为什么要在不使用Django的情况下连接到数据库?我会使用Django来实现,但您需要初始化Django,以便能够对其运行脚本。像这样的东西应该可以做到: import os, sys sys.path.append(
最好的方法是什么?如何在不使用Django的情况下连接到数据库?为什么要在不使用Django的情况下连接到数据库?我会使用Django来实现,但您需要初始化Django,以便能够对其运行脚本。像这样的东西应该可以做到:
import os, sys
sys.path.append('/path/to/django/project')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project_name.settings'
import django
django.setup()
from django.contrib.auth.models import User
for row in data:
user = User.objects.create_user(username=row['username'])
/path/to/django/project
是包含设置的目录所在文件夹的路径。例如,具有以下层次结构:
/projects/my_project
/projects/my_project/my_app
/projects/my_project/my_project/setting.py
您需要附加/projects/my_project
如果不是Django用户
模型,您需要使用自定义模型,而不是
from django.contrib.auth.models import User
做
如果希望插入数据而不经过django的视图,请使用shell 在应用程序目录中运行
python manage.py shell
然后通过python的JSON.loads()
导入JSON数据,并循环创建和保存数据模型
您还可以使用bulk\u create
创建模型
YourCustomUserModel.objects.bulk_create([
YourCustomUserModel(username=datarow.username)
for datarow in data
])
您可以改用Django的本机
manage.py
命令:
在yourapp
目录中,创建树结构(包括文件夹management
),如下所示:
yourapp
├── admin.py
├── __init__.py
├── management
│ ├── commands
│ │ ├── __init__.py
│ │ └── populate_db.py
│ └── __init__.py
├── models.py
... other files
然后,在文件populate_db.py
中编写适当的代码来填充数据库,例如:
from django.core.management.base import BaseCommand
from yourapp.models import Post, Tag
class Command(BaseCommand):
args = '<foo bar ...>'
help = 'our help string comes here'
def _create_tags(self):
tlisp = Tag(name='Python')
tlisp.save()
tjava = Tag(name='Java')
tjava.save()
def handle(self, *args, **options):
self._create_tags()
来自django.core.management.base import BaseCommand的
从yourapp.models导入帖子,标记
类命令(BaseCommand):
args=''
help='我们的帮助字符串出现在这里'
定义创建标签(自我):
tlisp=Tag(name='Python')
tlisp.save()
tjava=Tag(name='Java')
tjava.save()
def句柄(自身、*参数、**选项):
self.\u创建\u标记()
使用此设置,您可以运行$python manage.py populate\u db
自动填充数据库
当然,您可以扩展此代码以从JSON文件中读取输入,您可以将其保存在应用程序的data
文件夹中。这允许您将本应属于应用程序一部分的不合理数据提交到版本控制,而不必破坏数据库(从而可能影响超级用户访问)
这个优雅的解决方案归功于Eli Bendersky:您可以使用模块
sqlite3
,sqlalchemy
,peewee
。或者您可以尝试将JSON
转换为CSV
,然后使用一些数据库查看器/编辑器直接导入数据库。我不知道他们是否可以直接从JSON
-ie导入数据。只是我真的不知道把那个作业放在哪里,所以我有一个文件夹:project,它包含:django_project(我的应用程序和设置在那里)和一个文件夹作业(我在那里做我所有的作业、爬虫和其他东西来维护我的数据库)使用上面的代码,您可以在脚本中显式初始化Django环境,因此脚本驻留在哪里并不重要。如果愿意,可以将其放在jobs文件夹中。“/path/to/django/project”此路径必须位于我配置数据库的my settings.py上?不,它比该路径低一级。换句话说,它是包含设置文件的文件夹所在目录的路径。请从app_name.models import Dater中尝试
from django.core.management.base import BaseCommand
from yourapp.models import Post, Tag
class Command(BaseCommand):
args = '<foo bar ...>'
help = 'our help string comes here'
def _create_tags(self):
tlisp = Tag(name='Python')
tlisp.save()
tjava = Tag(name='Java')
tjava.save()
def handle(self, *args, **options):
self._create_tags()