iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >定义数据模型&访问数据库
  • 239
分享到

定义数据模型&访问数据库

2024-04-02 19:04:59 239人浏览 薄情痞子
摘要

定义数据模型一、Django定义数据模型在App中的models.py文件,数据库的表名称以类的形式来定义:[root@133 WEB]# cd /opt/python/dja

定义数据模型


一、Django定义数据模型在App中的models.py文件,数据库的表名称以类的形式来定义:

[root@133 WEB]# cd /opt/python/djanGo/web/blog/
[root@133 blog]# vim models.py
from django.db import models
# Create your models here.
class Host(models.Model):
    hostname = models.CharField(max_length = 50)
    ip = models.IPAddressField()


二、查看模型的语法和逻辑是否正确:Python manage.py validate , 0 errors 没有语法错误

[root@133 blog]# cd /opt/python/django/web
[root@133 web]# ls
blog  db.sqlite3  manage.py  web
[root@133 web]# python manage.py validate
0 errors found


三、管理数据库

初始化数据模型到数据库:python   manage.py  syncdb  (默认使用的slqite数据库,在setting.py可以看到)

[root@133 web]# cd /opt/python/django/web/web/
[root@133 web]# vim settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))#base_dir是seting.py的上级目录的上级目录:/opt/python/django/web/
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

前提是安装sqlite

[root@133 web]# cd  /opt/python/django/web/
[root@133 web]# python manage.py dbshell
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
sqlite> .exit

#后台演示同步数据库的时候数据库的创建过程,
[root@133 web]# python manage.py sqlall blog
BEGIN;
CREATE TABLE "blog_host" (
    "id" integer NOT NULL PRIMARY KEY,
    "hostname" varchar(50) NOT NULL,
    "ip" char(15) NOT NULL
)
;

COMMIT;

#同步数据库,会创建表blog_host,创建管理用户
[root@133 web]# python manage.py syncdb  
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table blog_host

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): root  #创建管理用户
Email address: david-dai@zamplus.com       #输入管理用户的邮箱
PassWord:                                   #输入管理用户的密码
Password (again): 
Superuser created successfully.  
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
[root@133 web]# ll
总用量 48
drwxr-xr-x 3 root root  4096 1月   3 09:50 blog
-rw-r--r-- 1 root root 34816 1月   3 10:12 db.sqlite3  #大小不为0
-rwxr-xr-x 1 root root   246 1月   1 23:11 manage.py
drwxr-xr-x 2 root root  4096 1月   3 10:02 web


查看数据库


方法一:通过admin的页面查看数据库

1、启动django

[root@133 web]# nohup python manage.py runserver 11.65.140.13:8080 &

2、在chrome浏览器中访问:输入用户名root和密码,默认是看不到数据库,需要把表注册到admin.py中,admin才能识别

[root@133 blog]# cd /opt/python/django/web/blog/
[root@133 blog]# vim admin.py
from django.contrib import admin
from blog.models import Host           #加载app应用models
# ReGISter your models here.
class HostAdmin(admin.ModelAdmin):
    list_display = ['hostname', 'ip']  #固定属性,类似表中的字段
admin.site.register(Host,HostAdmin)    #注册两个表,

刷新网页,多了一个host列,点击增加一个host,输入主机名和IP,点击保存,多了一个主机,可以查看

定义数据模型&访问数据库

定义数据模型&访问数据库

方法二:命令行方式登录查看数据库

[root@133 blog]# cd /opt/python/django/web/
[root@133 web]# ll
总用量 52
drwxr-xr-x 3 root root  4096 1月   3 10:28 blog
-rw-r--r-- 1 root root 34816 1月   3 10:32 db.sqlite3
-rwxr-xr-x 1 root root   246 1月   1 23:11 manage.py
-rw------- 1 root root  2125 1月   3 10:37 nohup.out
drwxr-xr-x 2 root root  4096 1月   3 10:02 web
[root@133 web]# sqlite3 db.sqlite3 
SQLite version 3.6.20
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .tables
auth_group                  auth_user_user_permissions
auth_group_permissions      blog_host                 
auth_permission             django_admin_log          
auth_user                   django_content_type       
auth_user_groups            django_session            
sqlite> select * from blog_host;
1|132|112.65.140.132
sqlite>.exit

[root@133 web]# python manage.py dbshell
sqlite> .tables
auth_group                  auth_user_user_permissions
auth_group_permissions      blog_host                 
auth_permission             django_admin_log          
auth_user                   django_content_type       
auth_user_groups            django_session   
sqlite> select * from blog_host;
1|132|112.65.140.132


访问数据库(一)

1、命令行的交互式方法(类似ipython登陆):

#命令行交互式登录
[root@133 web]# python manage.py shell
/opt/amos/python2.7/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py:58: RuntimeWarning: SQLite received a naive datetime (2017-01-03 15:11:34.737126) while time zone support is active.
  RuntimeWarning)
Python 2.7.3 (default, Jan  1 2017, 21:43:50) 
Type "copyright", "credits" or "license" for more infORMation.
IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.
In [1]: import sys

In [2]: sys.path
Out[2]: 
['',
 '/opt/python/django/web',            #项目的路径/opt/python/django/web成为环境变量
 ……
 ……

#导入表
 In [3]: from blog.models import Host  #blog 包中的modes.py文件,倒入类class:Host
 In [5]: Host.objects.all()    
Out[5]: [<Host: Host object>]         #返回是一个列表[],每个元素是一个class

#显示数据
In [6]: nodes = Host.objects.all() 
In [7]: nodes.values()                 #查看表中的内容
Out[7]: [{'ip': u'112.65.140.132', 'hostname': u'132', u'id': 1}]

#增加数据添加一个host
In [8]: Host(hostname='node02',ip='192.168.1.2')
Out[8]: <Host: Host object>
In [9]: n =Host(hostname='node02',ip='192.168.1.2') #实例化一个对象
In [10]: n.save()                                   #保存n
In [11]: nodes = Host.objects.all()
In [12]: nodes.values()
Out[12]: [{'ip': u'112.65.140.132', 'hostname': u'132', u'id': 1}, {'ip': u'192.168.1.2', 'hostname': u'node02', u'id': 2}]

 
另一种方法添加一个host
In [13]: n = Host()
In [18]: n.hostname = 'node03'
In [19]: n.ip = '192.168.1.3'
In [20]: n.save()                  #写入表
In [21]: nodes = Host.objects.all()
In [22]: nodes.values()
Out[22]: [{'ip': u'112.65.140.132', 'hostname': u'132', u'id': 1}, {'ip': u'192.168.1.2', 'hostname': u'node02', u'id': 2}, {'ip': u'192.168.1.3', 'hostname': u'node03', u'id': 3}]
浏览器查看多了一个node03

In [23]: n1 = nodes[0]
In [24]: n1.hostname
Out[24]: u'132'
In [25]: n1.ip 
Out[25]: u'112.65.140.132'
In [26]: n1.ip = '192.168.1.1' #直接修改n1的ip值
In [29]: n1.save()
浏览器刷新可以看到主机132的ip已经变为192.168.1.1

In [3]: from blog.models import Host

In [4]: nodes = Host.objects.all()

In [5]: nodes.values()
Out[5]: [{'ip': u'192.168.1.1', 'hostname': u'132', u'id': 1}, {'ip': u'192.168.1.2', 'hostname': u'node02', u'id': 2}, {'ip': u'192.168.1.3', 'hostname': u'node03', u'id': 3}]

In [6]: for i in nodes: print i.hostname
132
node02
node03

In [7]: for i in nodes: print i.hostname,i.ip
132 192.168.1.1
node02 192.168.1.2
node03 192.168.1.3


2、访问数据库二

通过视图文件views.py来访问数据

1、在urls.py文件里定义urls访问路径

[root@133 web]# cd /opt/python/django/web/web
[root@133 web]# vim urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'web.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/index/$', 'blog.views.index'),
    url(r'^db/$','blog.views.db'),             #增加url配置文件
)

2、在views.py里定义访问方法

[root@133 web]# cd /opt/python/django/web/blog/
[root@133 blog]# vim views.py

from django.shortcuts import render
from django.Http import HttpResponse
from django.template import loader, Context
from blog.models import Host   #从blog.models导入Host

# Create your views here.
def index(request):
    t = loader.get_template('index.html')
    c = Context({})
    return HttpResponse(t.render(c))

def db(req):
    h = Host()
    h.hostname = 'nodes04'
    h.ip = '192.168.1.4'
    h.save()
    return HttpResponse('OK')


网页访问:http://11.65.140.13:8080/db/   返回ok

注意:

request或者req是形式参数,形参可以随便定义,不是非得叫request或者req,可以叫abc。



访问数据库(三)/数据库传递post和get

定义api

1、urls.py

2、views.py定义访问方法(API)

[root@133 blog]# vim views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader, Context
from blog.models import Host

# Create your views here.
def index(request):
    t = loader.get_template('index.html')
    c = Context({})
    return HttpResponse(t.render(c))

def db(req):
    h = Host()
    h.hostname = 'nodes04'
    h.ip = '192.168.1.4'
    h.save()
    return HttpResponse('OK')

#添加collect方法
def collect(request):
    #if request.method == 'POST':
    if request.POST:
        hostname = request.POST.get('hostname')
        ip = request.POST.get('ip')
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse('OK,OK')
    else:
        return HttpResponse('not data')
        
#修改collect转发规则
[root@133 web]# cd /opt/python/django/web/web/
[root@133 web]# vim urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'web.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

    url(r'^admin/', include(admin.site.urls)),
    url(r'^blog/index/$', 'blog.views.index'),
    url(r'^db/$','blog.views.db'),
    url(r'^collect/$','blog.views.collect'),  #增加collect转发规则
)      

浏览器访问:
http://11.65.140.13:8080/collect/  返回:not data

需要修改setting文件,注释中间件,才能使用curl传数据,否则django不识别
[root@133 web]# vim settings.py
#    'django.middleware.csrf.CsrfViewMiddleware',

#使用-d参数post方法传hostname和ip
[root@133 blog]# curl -d hostname='node05' -d ip='192.168.1.5' http://112.65.140.133:8080/collect/
OK,OK                    

服务器端会用get方法提取hostname和ip,然后保存。
 可以查看到node05


通过get方法,先修改配置,然后通过浏览器传递。get方法是明文的,不是很安全

[root@133 blog]# vim views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader, Context
from blog.models import Host

# Create your views here.
def index(request):
    t = loader.get_template('index.html')
    c = Context({})
    return HttpResponse(t.render(c))

def db(req):
    h = Host()
    h.hostname = 'nodes04'
    h.ip = '192.168.1.4'
    h.save()
    return HttpResponse('OK')

def collect(request):
    #if request.method == 'POST':
    if request.POST:
        hostname = request.POST.get('hostname')
        ip = request.POST.get('ip')
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse('OK,OK')
    elif: request.method == 'GET':            #定义get方法
        hostname = request.GET.get('hostname')
        ip = request.GET.get('ip')
        host = Host()
        host.hostname = hostname
        host.ip = ip
        host.save()
        return HttpResponse('OK...')
    else:
        return HttpResponse('not data')

浏览器访问,指定hostname=node07,ip=192.168.1.7:

http://11.65.140.13:8080/collect/?hostname=node07&ip=192.168.1.7

返回:OK...


http://11.65.140.13:8080/admin/blog/host/

发现host07已经存在,使用浏览器的get方法传数据成功,明文,数据量小




您可能感兴趣的文档:

--结束END--

本文标题: 定义数据模型&访问数据库

本文链接: https://www.lsjlt.com/news/50276.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 定义数据模型&访问数据库
    定义数据模型一、Django定义数据模型在App中的models.py文件,数据库的表名称以类的形式来定义:[root@133 web]# cd /opt/python/dja...
    99+
    2022-10-18
  • 数据库日期型数据如何定义
    在数据库中,日期型数据可以使用DATE、DATETIME、TIMESTAMP等类型来定义。- DATE类型表示一个日期,格式为'YY...
    99+
    2023-09-22
    数据库
  • NodeJS Express如何使用ORM模型访问关系型数据库
    这篇文章主要介绍了NodeJS Express如何使用ORM模型访问关系型数据库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇NodeJS Express如何使用ORM模型访问关系型数据库文...
    99+
    2023-07-05
  • NodeJSExpress使用ORM模型访问关系型数据库流程详解
    目录一、ORM模型二、在Node中ORM的实现一、ORM模型 设计思想,主要目的是简化计算机程序访问数据库 1、ORM:对象关系模型(对象关系映射) Object Releastio...
    99+
    2023-01-10
    NodeJS Express访问关系型数据库 NodeJS ORM模型访问关系型数据库
  • SpringBoot数据访问自定义使用Druid数据源的方法
    数据访问之Druid数据源的使用 说明:该数据源Druid,使用自定义方式实现,后面文章使用start启动器实现,学习思路为主。 为什么要使用数据源: ​数据源是提高数...
    99+
    2022-11-12
  • oracle数据库访问
    1: 装上ODBC-oracle驱动之后,配置数据源的时候,用给的用户名和密码,弹出错:unable to connect SQLState=28000[oracle][ODBC][Ora]ORA-0101...
    99+
    2022-10-18
  • Spring JDBC 访问数据库
        Spring JDBC是Spring所提供的持久层技术,它以一种更直接、更简单的方式使用JDBC API。在Spring JDBC里,用户仅需要做那些必不可杀...
    99+
    2022-10-18
  • DM自定义数据类型
    自定义类型 用户使用CREATE TYPE语句可以定义记录类型、对象类型、命名的数组类型、集合类型等,如果在对象类型中声明了过程或方法,可以使用CREATE TYPE BODY定义这些过程和方法。 创建类型...
    99+
    2022-10-18
  • Oracle数据库中如何限定特定IP访问
    本篇内容介绍了“Oracle数据库中如何限定特定IP访问”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成![A]可以利用登录触发器、cmgw或者...
    99+
    2023-06-17
  • mysql数据库的定义
    本篇内容介绍了“mysql数据库的定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  ...
    99+
    2022-10-18
  • ThinkPHP01:数据库和模型
    ThinkPHP01:数据库和模型 一、开启调试模式二、配置文件三、URL解析四、数据库五、模型1. 定义模型2. 使用模型① 查询记录② 新增记录③ 删除记录④ 更新记录 3. 字段设...
    99+
    2023-09-03
    数据库 php mysql
  • 限制指定机器IP访问oracle数据库
    通过使用数据库服务器端的sqlnet.ora文件可以实现禁止指定IP主机访问数据库的功能,这对于提升数据库的安全性有很大的帮助,与此同时,这个技术为我们管理和约束数据库访问控制提供了有效的手段。下面是实现这...
    99+
    2022-10-18
  • 【方法】如何限定IP访问Oracle数据库
    【方法】如何限定IP访问Oracle数据库 1.1  BLOG文档结构图 1.2  前言部分1.2.1  导读和注意事项各位技术爱好者,看完本文后,你可以掌...
    99+
    2022-10-18
  • 怎么访问vps数据库
    要访问VPS数据库,您需要使用一个数据库管理工具,如MySQL Workbench或phpMyAdmin。以下是一些基本步骤:1. ...
    99+
    2023-08-20
    vps 数据库
  • 高频访问SQLite数据库
    使其多读多写的并发访问成为可能 SQLite 是一款开源的 SQL 数据库引擎,由于其自包含、无服务、零配置和友好的使用许可(完全免费)等特点,在桌面和移动平台被广泛使用。 在应用开发过程中,如果想保存点数据,...
    99+
    2016-09-25
    高频访问SQLite数据库
  • JavaScript如何定义数据类型
    这篇文章主要介绍“JavaScript如何定义数据类型”,在日常操作中,相信很多人在JavaScript如何定义数据类型问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java...
    99+
    2022-10-19
  • Mysql数据库的数据模型有哪些?
    今天小编就为大家带来一篇介绍Mysql数据库的数据模型的文章。小编觉得挺实用的,为此分享给大家做个参考。一起跟随小编过来看看吧。层次模型层次模型是数据库系统最早使用的一种模型,它的数据结构是一棵“有向树”。...
    99+
    2022-10-18
  • ADO.NET中如何使用连接模式访问数据库中的数据
    本篇内容介绍了“ADO.NET中如何使用连接模式访问数据库中的数据”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!ADO.NET框架支持两种模...
    99+
    2023-06-17
  • greenplum数据库python自定义函数
    greenplum数据库(下面简称gp数据库)支持自定义函数,下面介绍的是python编写的自定义简单函数。聚类函数较复杂,自我感觉不适合在gp数据库中编写。python自定义函数说明了只要python能对...
    99+
    2022-10-18
  • java换成ip访问数据库无法访问
    一.错误现象 1.1 问题描述 springboot使用双数据源:本意是从第一个数据库中查询导数据然后加入另外一个数据库,代码一切正常后运行结果如下报错, 仔细一排查发现数据是查询到的,说明是入数据的库出问题了,结果发现我之前连接的时候是用...
    99+
    2021-09-19
    java换成ip访问数据库无法访问 数据库入门 数据库基础教程 数据库 mysql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作