• MySQL在Django框架下的基本操作(MySQL在Linux下配置)


    注:本文已迁移至CSDN,后续的更新也会在CSDN。

    http://blog.csdn.net/houchaoqun_xmu/article/details/53813633

    http://blog.csdn.net/houchaoqun_xmu

    【原】本文根据实际操作主要介绍了Django框架下MySQL的一些常用操作,核心内容如下:

    -------------------------------------------------------------------------------------------------

    1. Linux环境下MySQL的安装与配置

    2. 【Linux】MySQL在Django框架下的基本操作

    3. Django框架下,一些常用的数据库操作(增删改查 - python)

    4. 本文相关的一些参考网址

    注:本文会根据实践,持续更新文档,如有错误,希望读者指出哈!~

    -------------------------------------------------------------------------------------------------

    一、Linux环境下MySQL的安装与配置

     -- 说明:本文中展示的MySQL是在虚拟机下进行的(参考网址:http://jingyan.baidu.com/article/425e69e6bbc6c7be14fc1640.html

    1. 在终端输入【sudo apt-get update】更新仓库;

    2. 输入【sudo apt-get install mysql-server mysql-client】--> 回车 --> 输入【y】--> 回车,等待安装。

    -- 期间,会弹出窗口让你设置密码,输入密码后,等待安装即可,如下图所示(注,本文由于实践过程中忘记截图,所以使用百度经验的图):

    3. 判断是否安装完成:

    【方法一】ps -aux | grep mysql    // 查看进程
    【方法二】mysql -u root -p        // 进入MySQL命令模式

    -- 效果图如下所示:

    二、【Linux】MySQL在Django框架下的基本操作

    -- 在Linux环境下安装MySQL完成后,就可以开始进行一些基本的操作了!

    0. 【SSH Secure Shell】本文使用SSH客户端与阿里云服务器进行交互,首先通过SSH连接到服务器的root模式下(输入服务器IP,用户名和密码,其中端口号默认为22)!

    1. 进入MySQL命令行模式:(参考网址:https://zhidao.baidu.com/question/202225195.html

       格式: mysql -h主机地址 -u用户名 -p用户密码 
    1、例1:连接到本机上的MYSQL 
       找到mysql的安装目录,一般可以直接键入命令【mysql -uroot -p】,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql> 
    
    2、连接到远程主机上的MYSQL 
       假设远程主机的IP为:10.0.0.1,用户名为root,密码为123。则键入以下命令: 
       mysql -h10.0.0.1 -uroot -p123 
      (注:u与root可以不用加空格,其它也一样) 
    3、退出MYSQL命令 exit (回车)

    -- 【mysql -uroot -p】本文是直接使用SSH客户端连接的服务器,所以采用上述例1的方式,如下图所示:

    2. 创建数据库并查看相关的表(此处创建的数据库与Django项目下setting.py配置的内容相对应):

    -- 在MySQL命令行模式下输入【CREATE DATABASE TuringClass_DB CHARACTER SET utf8;】创建数据库 TuringClass_DB;

    -- 在Django项目目录下输入【python manage.py syncdb】创建相关的表;(注:此处是在Django项目下建表,还可以在MySQL命令行模式下建表)

    -- 在MySQL命令行模式下输入【use TuringClass_DB;】制定当前操作的数据库为 TuringClass_DB;

    -- 在MySQL命令行模式下输入【show tables;】查看当前数据库中的所有表;

    -- CREATE DATABASE TuringClass_DB;   // 
    -- CREATE DATABASE TuringClass_DB CHARACTER SET utf8;   // 本文选择此方法创建数据库
    【注:此处MySQL关键字不区分大小写,其中 TuringClass_DB 对应 setting.py 配置的数据库】

    Django项目 setting.py 中MySQL的配置如下所示:

        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'TuringClass_DB',
            'USER': 'XXXXXX',
            'PASSWORD': 'XXXXXX',   # Setting when installing MySQL
            'HOST': '127.0.0.1',
            'PORT': '3306',
        }

    -- 执行命令后的效果图:

    3. 在MySQL命令行模式下建表(参考网址:http://www.cnblogs.com/ggjucheng/archive/2012/11/03/2752082.html):

    -- 简单的方式:

    CREATE TABLE person (
    number INT(11),
    name VARCHAR(255),
    birthday DATE
    );

    -- 如果表已存在,则使用关键词IF NOT EXISTS可以防止发生错误:

    CREATE TABLE IF NOT EXISTS person (
    number INT(11),
    name VARCHAR(255),
    birthday DATE
    );

    4. 删除数据库(整个数据库):此处操作的数据库对象为 TuringClass_DB

    drop database TuringClass_DB;

    -- 效果图如下所示:

    5. 删除数据库中指定的表(删除多个指定的表)

    【格式】drop table tableName1, tableName2;
    【例子】drop table app_accounts_turingroletype,app_accounts_turinguser;

    -- 效果图如下所示:

    6. 查询表的字段信息

    【格式】desc 表名称;
    【例子】desc app_TuringClass_questionlist;

    -- 效果图如下所示:

    7. 数据库的表查询【select ....from.... where=】

    select * from app_TuringClass_questionlist where QuestionID = 1;

    -- 效果图如下所示:

    8. 修改数据库中表的结构(这些命令尚未亲测,参考网址:http://blog.csdn.net/lxh090821/article/details/9410943

    # 表position增加列test
    alter tableposition add(test char(10));
    # 表position修改列test
    alter tableposition modify test char(20) not null;
    # 表position修改列test默认值
    alter tableposition alter test set default 'system';
    # 表position去掉test默认值
    alter tableposition alter test drop default;
    # 表position去掉列test
    alter tableposition drop column test;
    # 表depart_pos删除主键
    alter tabledepart_pos drop primary key;
    # 表depart_pos增加主键
    alter tabledepart_pos add primary key PK_depart_pos (department_id,position_id);

    9. 显示当前mysql版本和当前日期

    查询时间:select now();
    查询当前用户:select user();
    查询数据库版本:select version();
    查询当前使用的数据库:select database();

    -- 效果图如下所示:

    三、Django框架下,一些常用的数据库操作(增删改查 - python)【持续更新中...】:

    -- 参考网址:http://blog.csdn.net/leiyonglin/article/details/6799428

    1. 插入数据:

    >>> from books.models import Publisher  
    >>> p1 = Publisher(name='Apress', address='2855 Telegraph Avenue',  city='Berkeley', state_province='CA', country='U.S.A.', website='http://www.apress.com/')  
    >>> p1.save()  

    2. 查询数据:

    -- 获取指定表的所有数据:

    >>> Publisher.objects.all()  
    [<Publisher: Apress>, <Publisher: O'Reilly>]  

    -- 获取指定表的单个数据对象:如果结果是多个对象或者没有返回结果则会抛出异常

    >>> Publisher.objects.get(name="Apress")  
    <Publisher: Apress>

    3. 条件查询:

    Publisher.objects.filter(name='Apress') 
    [<Publisher: Apress>]  

    -- 正序排序:相当于 order by name asc

    >>> Publisher.objects.order_by("name")  
    [<Publisher: Apress>, <Publisher: O'Reilly>]  

    -- 逆序排序:相当于 order by name desc

    >>> Publisher.objects.order_by("-name")  

    -- 限制返回数据:相当于 limit 1

    >>> Publisher.objects.order_by('name')[0]  
    <Publisher: Apress>  
    
    _TuringUser = TuringRoleType.objects.get_or_create(RoleTypeID = RoleTypeID, RoleTypeName = RoleTypeName, DeletePermission = DeletePermission, PostPermission = PostPermission, SuperPermission = SuperPermission)[0]

    4. 更新数据:

    【方法一】
    >>> Publisher.objects.filter(id=52).update(name='Apress Publishing') 【方法二】 >>> p = Publisher.objects.get(name='Apress') #先查询 >>> p.name = 'Apress Publishing' #更新 >>> p.save() #保存

    5. 删除数据:

    【方法一】
    >>> p = Publisher.objects.get(name="O'Reilly")  
    >>> p.delete()  
    【方法二】
    >>> Publisher.objects.filter(country='USA').delete()  

    6. 判断数据是否存在:

    if TuringRoleType.objects.filter(RoleTypeID = RoleTypeID).exists():
            print "[RoleTypeID] = ",RoleTypeID + ", has been existed!"
        else:
            print "Table [TuringRoleType] RoleTypeID = ", RoleTypeID

    -- 案例1,数据初始化 - 用户类型表

    def Population():
        AddNewRoleType('admin', '管理员', True, True, True)
        AddNewRoleType('student', '学生用户', True, True, False)
        AddNewRoleType('tourist', '游客用户', False, False, False)
    
    def AddNewRoleType(RoleTypeID, RoleTypeName, DeletePermission, PostPermission, SuperPermission):
        if TuringRoleType.objects.filter(RoleTypeID = RoleTypeID).exists():
            print "[RoleTypeID] = ",RoleTypeID + ", has been existed!"
        else:
            print "Table [TuringRoleType] RoleTypeID = ", RoleTypeID
            _TuringUser = TuringRoleType.objects.get_or_create(RoleTypeID = RoleTypeID, RoleTypeName = RoleTypeName, DeletePermission = DeletePermission, PostPermission = PostPermission, SuperPermission = SuperPermission)[0]
            _TuringUser.save()
    
    ### main program
    if __name__ == '__main__':
        Population()

    四、常见问题及其解决方法【持续更新中...】:

    1. Django MySQL数据库配置以及管理界面提交中文错误解决

    -- 参考网址:http://www.linuxidc.com/Linux/2014-03/97955.htm

    2. Python EOL while scanning string literal问题解决方法

    -- 本文遇到的问题是因为使用vim在服务器上修改代码时,出现字符串问题,重新上传相关的代码即可!

    -- 参考网址:http://www.jb51.net/article/65067.htm

    3. 

    -----------------------------------------------------------------------

    参考网址:

    1. 【mysql 常用操作】http://blog.csdn.net/lxh090821/article/details/9410943

    2. 【mysql创建和删除表】http://www.cnblogs.com/ggjucheng/archive/2012/11/03/2752082.html

    3. 【mysql索引详解(转)】http://www.cnblogs.com/ggjucheng/archive/2012/11/04/2754128.html

     -------------------------------------------------------------

    【注】博文由本文经过实践进一步整理,如有问题,还望指出,本人会及时纠正!谢谢^^

    --------------------------------------------------------------

  • 相关阅读:
    不用递归实现List转Tree
    spring cloud stream 局部异常和全局异常混乱
    HTTP协议详解(真的很经典)
    Python3 多线程压测接口数据:写入到influxdb:通过grafana展示
    Eclipse使用git最简易流程
    oracle patch包一定要775的权限
    安装19c grid时CRS-1705错误
    Ubutun 设置开机启动程序
    利用selenium将edge浏览器里面的网页保存为pdf
    Ruckus ICX7150 Switch License Upgrade from 1G to 10G
  • 原文地址:https://www.cnblogs.com/XMU-hcq/p/6184414.html
Copyright © 2020-2023  润新知