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

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

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

2. Django框架下,MySQL的基本操作

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. 判断是否安装完成:

way1: ps -aux | grep mysql    // 查看进程
way2: 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 -h10.0.0.1 -uroot -p123
   exit 
   quit 
4、查看当前有哪些数据库:
show databases;

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

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

== 在MySQL命令行模式下输入如下命令,创建数据库 TuringClass_DB;
CREATE DATABASE TuringClass_DB CHARACTER SET utf8;
sudo pip install mysql-python
== 在Django项目目录下输入如下命令创建相关的表;(注:此处是在Django项目下建表,还可以在MySQL命令行模式下建表)
python manage.py syncdb
== 在MySQL命令行模式下输入如下命令制定当前操作的数据库为 TuringClass_DB;
use TuringClass_DB;
== 在MySQL命令行模式下输入如下命令查看当前数据库中的所有表;
show tables;
CREATE DATABASE TuringClass_DB; // 
CREATE DATABASE TuringClass_DB CHARACTER SET utf8;  // 本文选择此方法创建数据库
== 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',
    }
-- 执行命令后的效果图:
  
CREATE TABLE person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
CREATE TABLE IF NOT EXISTS person (
number INT(11),
name VARCHAR(255),
birthday DATE
);
drop database TuringClass_DB;
[format ] drop table tableName1, tableName2;
[example] drop table app_accounts_turingroletype,app_accounts_turinguser;
-- 效果图如下所示:
[format] desc 表名称;
[example]desc app_TuringClass_questionlist;
select * from app_TuringClass_questionlist where QuestionID = 1;
# 表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);
-- 参考网址: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]   

_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()
有可能你的系统没有 safe_mysqld 程序(比如我现在用的 ubuntu操作系统, apt-get安装的mysql) , 下面方法可以恢复

1. 停止mysqld; 
/etc/init.d/mysql stop
(您可能有其它的方法,总之停止mysqld的运行就可以了)

2. 用以下命令启动MySQL,以不检查权限的方式启动; 
mysqld --skip-grant-tables &

3. 然后用空密码方式使用root用户登录 MySQL; 
mysql -u root

4. 修改root用户的密码; 
mysql> update mysql.user set password=PASSWORD('newpassword') where User='root'; 
mysql> flush privileges; 
mysql> quit 
重新启动MySQL
/etc/init.d/mysql restart