zoukankan      html  css  js  c++  java
  • 八、model_login2

    shell模式

    1、概述

    一般操作数据库表的时候都是通过views.py文件进行操作的

    在view.py文件中操作表单

    操作表都是操作model.py里面的对象

    2、基本数据访问

    2.1、查询数据1

    进入到shell模式

    终端输入:

    python3 manage.py shell
    

    导入sign应用下面的molders.py中的Event、Guest两张表

    终端输入:

    from sign.models import Event,Guest
    

     利用table.objects.all()查询相对应数据库表的数据

    终端输入:

    >>> Event.objects.all()
    <QuerySet [<Event: 糖猴子的发布会>, <Event: 糖糖>]>
    >>> Guest.objects.all()
    <QuerySet [<Guest: 张三>]>
    

     2.2、插入数据

    因为发布会涉及到时间,需要引包datetime模块

    定义一个变量e1--在数据库里面暂时看不到相对应的数据

    保存e1变量保存到数据库里面

    终端输入

    >>> from datetime import datetime
    >>> e1 = Event(id = 3,name = '新建的发布会',limit = '3000',status = False,address = '普陀',start_time = datetime(2017,8,10,14,0,0))
    >>> e1.save()
    

     数据库页面展示

    保存数据库信息的时候,警告信息如下(世界时相关)

    >>> e1.save()
    /usr/local/lib/python3.6/site-packages/django/db/models/fields/__init__.py:1451: RuntimeWarning: DateTimeField Event.start_time received a naive datetime (2017-08-10 14:00:00) while time zone support is active.
      RuntimeWarning)
    

     解决方案:需要退出shell模式之后,将setting.py文件中的 USE_TZ = False 修改成 USE_TZ = False即可

    >>> quit()
     monkey@MacBook-Pro-7 � /usr/local/lib/python3.6/site-packages/guest � python3 manage.py shell
    Python 3.6.3 (default, Oct 17 2017, 00:27:06)
    [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    (InteractiveConsole)
    >>>
    >>> from sign.models import Event,Guest
    >>>
    >>> from datetime import datetime
    >>>
    >>> e1 = Event(id = 6,name = '新建的发布会4',limit = '3000',status = False,address = '普陀4',start_time = datetime(2017,8,13,14,0,0))
    >>> e1.save()
    >>>
    

     数据库截图如下:

     

    2.3、查询数据2

    get方法

    只支持精确查找

    >>> e2 = Event.objects.get(name = "新建的发布会4")
    >>> e2
    <Event: 新建的发布会4>
    >>> e2.address
    '普陀4'

    模糊搜索的保存

    查询的数据不存在也会报错

    >>> Event.objects.get(name = '发布会')
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
      File "/usr/local/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
        return getattr(self.get_queryset(), name)(*args, **kwargs)
      File "/usr/local/lib/python3.6/site-packages/django/db/models/query.py", line 380, in get
        self.model._meta.object_name
    sign.models.DoesNotExist: Event matching query does not exist.
    

    filter方法

    模糊搜索的时候直接输入的话会返回为空

    Event.objects.filter(name = '发布会')
    <QuerySet []>
    

    不直接支持模糊查询,如果需要模糊搜索,需要在name后面加上__contains

    Event.objects.filter(name__contains = '发布会')
    <QuerySet [<Event: 糖猴子的发布会>, <Event: 新建的发布会>, <Event: 新建的发布会4>]>
    

     2.4、删除数据

    利用delete的方法删除数据

    >>> e3 = Event.objects.get(name = '新建的发布会')
    >>> e3.delete()
    (1, {'sign.Guest': 0, 'sign.Event': 1})
    >>>
    >>> Event.objects.all()
    <QuerySet [<Event: 糖猴子的发布会>, <Event: 糖糖>, <Event: 新建的发布会4>]>
    >>>
    

      2.5、更新数据

    根据属性的唯一性,event_id来查询到相对应的数据

      g1.realname = 'lisi'  更新嘉宾表中的数据
    保存相对应更新的数据
    >>> g1 = Guest.objects.get(event_id ='1')
    >>>
    >>> g1.realname = 'lisi'
    >>> g1.save()
    >>>
    >>> Guest.objects.all()
    <QuerySet [<Guest: lisi>]>
    

     3、mysql相关操作姿势

    3.1、安装mysql

    安装步骤可参照:http://www.jianshu.com/p/fd3aae701db9

    安装完毕mysql

    终端输入:mysql -u root -p(需要登陆密码,首次输入安装页面给出的密码)

    mysql -u root -p
    Enter password: Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 777 Server version: 5.7.20 Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql>

    3.2、查看当前数据库下面的所有库

    进入到mysql环境,终端输入:show databases

    如下代码,如果你一直用的都是安装时带的密码,所提示你重设代码

    mysql> show databases;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    

     终端输入:mysql> set password = password('123456'); 设置密码

    mysql> set password = password('123456');
    Query OK, 0 rows affected, 1 warning (0.02 sec)
    

    再次终端输入:show databases就会显示当前数据库下面的所有库

    3.3、使用库并且展示库下面的所有表

    mysql> use sys;    #选择使用数据库
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;   #显示数据库下面的所有表
    

     3.4、查看端口号

    mysql> show global variables like 'port';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | port          | 3306  |
    +---------------+-------+
    1 row in set (0.01 sec)
    

     3.5、退出mysql,终端输入:ifconfig | grep "inet " | grep -v 127.0.0.1 (Mac不仅仅需要输入的是ifconfig)查看IP地址

    monkey@MacBook-Pro-7 � ~ � ifconfig | grep "inet " | grep -v 127.0.0.1
    	inet xx.xx.xx.xxx(ip地址) netmask 0xffffff00 broadcast 10.12.49.255
    

     3.6、本地登陆

    进入到mysql命令

    终端输入:MySQL -uroot -p123456   创建登陆账号

     monkey@MacBook-Pro-7 � ~ � mysql -uroot -p123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 802
    Server version: 5.7.20 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    

    创建远程登陆用户并授权

    mysql> grant all PRIVILEGES on test_db.* to root@'XX.XX.XX.XXX'(IP地址)  identified by '123456';
    Query OK, 0 rows affected, 1 warning (0.01 sec)
    

    用mysql客户端 输入host(IP地址)、port、用户名、密码登陆即可

    3.7、本地创建数据库表

    4、修改Django数据库配置

    4.1、setting文件下面添加mysql数据库连接信息

    #配置mysql数据库链接
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',  #IP地址
            'PORT': '3306',   #端口号
            'NAME': 'dev_guest',   #表名
            'USER': 'root',   #账户
            'PASSWORD': '123456',   #密码
            'OPTIONS': {
                'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            },
        }
    }
    

     

    4.2、__init__文件中,引入pysql来代替mysqldb

    import pymysql
    pymysql.install_as_MySQLdb()
    

    5、切换后数据库的生成

    将sqlite数据库切换成mysql之后,原先的数据都没有了,需要重新生成数据。

    生成相对应的数据库表

     

     


     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    杯具的流浪狗
    数据加密与数据压缩后加密的效率
    XMPP协议自定义消息类型扩展
    have a try
    linux修改网卡名称的方法
    WARNING: old character encoding and/or character set解决办法
    extern用法总结
    linux下的c++线程池实现
    32位linux系统操作大于2G文件方法
    eclipse中gdb调试输出stl容器的内容
  • 原文地址:https://www.cnblogs.com/little-turtle/p/7787754.html
Copyright © 2011-2022 走看看