最近用python做爬虫,爬取的数据需要入到数据库,本来都是一些小的爬虫程序,也没有用到任何框架,但是等数据入库的时候各种拼接sql语句,有时候文本中包含“,会直接报错,烦不胜烦,考虑是否有简单的数据库的orm框架,方便数据库这块的操作,考虑到之前接触过一些django的知识,就想从这方面入手。
Django是一个由python写成开源的的web应用框架,采用mvc的设计模式。Django框架的核心包括:一个面向对象的映射器,用作数据模型(以Python类的形式定义)和关系性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统,用于处理请求;以及一个模板系统。显然这里我们只需要Django的对象映射器帮助操作数据库。
我使用的python IDE是pycharm,使用过android studio的同学一定会对这个ide的界面很熟悉,因为他们都是JetBrains开发的一些列IDE的一员,界面风格十分相似,满满都是熟悉的味道。
言归正传,要接入Django,首先要安装Django库,在pycharm中安装第三方库如下:
安装还是很方便的。
前面说了我们只需要使用Django的对象映射器操作数据库,并不会使用到其他组建,标准的Django会有个setting.py,manager.py等配置,这里其实都不需要。根据我们的需求,其实我们只需要启动一个Django的环境,然后传入数据库配置,对应的实体映射关系即可。而Django其实是有这些方法实现我们的需求的。
talk is cheap,show me the code
所以换不多说,先上代码,首先是Entity.py的内容
#!/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讲起,Django文档里面说的很清楚:
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,
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需要使用以下第二种
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()
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环境启动后会自动映射到数据库中对应的表。使用起来也很简单:
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 删除。