前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 中单独调用 django 的数据库模块

python 中单独调用 django 的数据库模块

原创
作者头像
玉面小色熊
修改2017-07-28 10:01:59
3.7K0
修改2017-07-28 10:01:59
举报
文章被收录于专栏:李雄的专栏李雄的专栏

背景

最近用python做爬虫,爬取的数据需要入到数据库,本来都是一些小的爬虫程序,也没有用到任何框架,但是等数据入库的时候各种拼接sql语句,有时候文本中包含“,会直接报错,烦不胜烦,考虑是否有简单的数据库的orm框架,方便数据库这块的操作,考虑到之前接触过一些django的知识,就想从这方面入手。

Django简介

Django是一个由python写成开源的的web应用框架,采用mvc的设计模式。Django框架的核心包括:一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统。显然这里我们只需要Django的对象映射器帮助操作数据库。

单独接入Django数据库模块

我使用的python IDE是pycharm,使用过android studio的同学一定会对这个ide的界面很熟悉,因为他们都是JetBrains开发的一些列IDE的一员,界面风格十分相似,满满都是熟悉的味道。

1.Django安装

言归正传,要接入Django,首先要安装Django库,在pycharm中安装第三方库如下:

安装还是很方便的。

2.Django在项目中使用

前面说了我们只需要使用Django的对象映射器操作数据库,并不会使用到其他组建,标准的Django会有个setting.py,manager.py等配置,这里其实都不需要。根据我们的需求,其实我们只需要启动一个Django的环境,然后传入数据库配置,对应的实体映射关系即可。而Django其实是有这些方法实现我们的需求的。

talk is cheap,show me the code 所以换不多说,先上代码,首先是Entity.py的内容

代码语言:javascript
复制
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/6/2 上午11:15
# @Author  : pudgeli@tecncent.com
#import相关的Django类
from django.db import models
from django.conf import settings
import django

#外部调用django时,需要设置django相关环境变量

#设置INSTALLED_APPS信息
INSTALLED_APPS = [
    'Entity',
    # 'django.contrib.admin',
    # 'django.contrib.auth',
    # 'django.contrib.contenttypes',
    # 'django.contrib.sessions',
    # 'django.contrib.messages',
    # 'django.contrib.staticfiles',
]
#设置数据库信息
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',   #mysql的engine
        'NAME': 'plant',                        #数据库名称
        'USER': 'root',                         #数据库用户名
        'PASSWORD': '123456',                   #数据库密码
        'HOST': 'localhost',                    #主机地址
        'PORT': '3306',                         #数据库端口号
    }
}
#给Django配置相关信息
settings.configure(DATABASES=DATABASES, INSTALLED_APPS=INSTALLED_APPS)
#启动Django
django.setup()

#构造ORM的对象
class Animal_json(models.Model):
    name = models.CharField(db_column=u'name', max_length=512, primary_key=True)
    data_json = models.TextField(db_column=u'data_json')

    def __unicode__(self):
        return 'animal_json'

    class Meta:
        db_table = 'animal_json'

先给出Django文档中相关内容以供参考

settings.configuration说明

首先从settings.configuration讲起,Django文档里面说的很清楚:

代码语言:javascript
复制
Using settings without setting DJANGO_SETTINGS_MODULE

In some cases, you might want to bypass the DJANGO_SETTINGS_MODULE environment variable. For example, if you’re using the template system by itself, you likely don’t want to have to set up an environment variable pointing to a settings module.

In these cases, you can configure Django’s settings manually. Do this by calling:

django.conf.settings.configure(default_settings, **settings)¶
Example:

from django.conf import settings

settings.configure(DEBUG=True)
Pass configure() as many keyword arguments as you’d like, with each keyword argument representing a setting and its value. Each argument name should be all uppercase, with the same name as the settings described above.

大致意思是如果只是临时想使用一下Django部分功能而不像启动所有的DJANGO_SETTINGS_MODULE,可以通过settings.configutation配置django,使用configutration可以配置setting中任意的参数,参数名必须大写。 至于configuration的参数,可以参考settings说明,这里只给出上面使用到的两个参数的说明

1.INSTALLED_APPS

可以看出INSTALLED_APPS类型是数组,数组内容相应的python路径,表示在Django希望使用的class或package,

代码语言:javascript
复制
INSTALLED_APPS

Default: [] (Empty list)

A list of strings designating all applications that are enabled in this Django installation. Each string should be a dotted Python path to:

an application configuration class (preferred), or
a package containing an application.

2.DATABASES

DATABASES的类型是一个dictionary,字典中是相关的数据库配置,配置mysql需要使用以下第二种

代码语言:javascript
复制
DATABASES

Default: {} (Empty dictionary)

A dictionary containing the settings for all databases to be used with Django. It is a nested dictionary whose contents map a database alias to a dictionary containing the options for an individual database.

The DATABASES setting must configure a default database; any number of additional databases may also be specified.

The simplest possible settings file is for a single-database setup using SQLite. This can be configured using the following:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase',
    }
}
When connecting to other database backends, such as MySQL, Oracle, or PostgreSQL, additional connection parameters will be required. See the ENGINE setting below on how to specify other database types. This example is for PostgreSQL:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'mydatabase',
        'USER': 'mydatabaseuser',
        'PASSWORD': 'mypassword',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

django.setup()说明

Django文档中说的很清楚,如果是启动web-server或Django-admin,Django会帮你自动启动Django环境,但是如果是想独立启动Django环境,则需要使用django.setup()

代码语言:javascript
复制
Calling django.setup() is required for “standalone” Django usage

If you’re using components of Django “standalone” – for example, writing a Python script which loads some Django templates and renders them, or uses the ORM to fetch some data – there’s one more step you’ll need in addition to configuring settings.

After you’ve either set DJANGO_SETTINGS_MODULE or called configure(), you’ll need to call django.setup() to load your settings and populate Django’s application registry. For example:

import django
from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()

# Now this script or any imported module can use any part of Django it needs.
from myapp import models
Note that calling django.setup() is only necessary if your code is truly standalone. When invoked by your Web server, or through django-admin, Django will handle this for you.

Entity说明

entity就比较简单,就是需要将与数据库中表映射的对象,继承Django的models.Model,Django环境启动后会自动映射到数据库中对应的表。使用起来也很简单:

代码语言:javascript
复制
from Entity import Animal_json
def getAnimals():
    global animals
    animals = Animal_json.objects.all()
    return animals

只需要上面几行代码,就可以读取Animal_json表中所有的数据,没有sql语句的拼接,也没有cursor数据的遍历,是不是很easy?

总结

使用过程中google了很多,虽然有很多都给出了类似的解决方案,但是并没有说明各种设置的意义,最有帮助的还是Django官方文档,解决了问题也了解了原理,官方文档才是王道,所以抓紧时间找个小伙伴一起学习外语吧!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • Django简介
  • 单独接入Django数据库模块
    • 1.Django安装
      • 2.Django在项目中使用
        • settings.configuration说明
    • 总结
    相关产品与服务
    云数据库 SQL Server
    腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档