#######MySQL 数据库使用 ########
1.MySQL
MySQL 是 Web 世界中使用最广泛的数据库服务器。
MySQL 内部有多种数据库引擎,最常用的引擎是支持数据库事务的 InnoDB。
安装MySQL
• 一定要进行设置密码,确保数据库安全;
• 配置文件为/etc/my.cnf 写入charset='utf8';
• 修改数据库默认的编码全部改为 UTF8;
• 查看编码格式:show variables like '%char%';
• 安装MySQLpython,封装了 MySQL C 驱动的 Python 驱动。
[root@server ~]# yum install mariadb-server.x86_64 MySQL-python.x86_64 -y ##安装服务
Loaded plugins: langpacks
Package 1:mariadb-server-5.5.35-3.el7.x86_64 already installed and latest version
Package MySQL-python-1.2.3-11.el7.x86_64 already installed and latest version
Nothing to do
[root@server ~]# systemctl start mariadb
[root@server ~]# systemctl enable mariadb.service
ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
[root@server ~]# mysql_secure_installation ##数据库初始化
[root@server ~]# mysql -uroot -pwestos ##登陆
MariaDB [(none)]> create database hello; ##创建数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hello |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
[root@server ~]# vim /etc/my.cnf ## 修改数据库默认的编码全部改为 UTF8,解决汉字的问题
14 charset='utf8'
[root@server ~]# systemctl restart mariadb.service
[root@server ~]# ipython
In [1]: import MySQLdb ##导入MySQLdb模块
2.建立MySQL连接
•host : MySQL 数据库地址 本地localhost ,其他直接指定ip
•user: 数据库登陆用户名
•passwd: 数据库登陆密码
•db: 登陆数据库后,需要操作的库名
•port: 数据库监听端口,默认为 3306
•charset: 数据库编码MySQL连接操作
• commit() 如果数据库表进行了修改,提交保存当前的数据,提交后登录才可查看到。
• rollback() 如果有权限,就取消当前的操作,否则报错
• cursor() 游标指针。
In [3]: conn = MySQLdb.connect(host='localhost',user='root',passwd='westos',db='hello')
3.游标操作
# 创建一个数据库游标
cursor() 提供的方法来进行操作,方法主要是 :
1. 执行命令
2. 接收结果
In [3]: cur = conn.cursor()
In [5]: cur.execute('use hello;')
Out[5]: 0L
4.插入数据
cursor 执行命令的方法:
•execute(query, args): 执行单条 sql 语句。 query 为 sql 语句本身, args 为参数值的列表。执行后返回值为受影响的行数。
•executemany(query, args): 执行单条 sql 语句 , 但是重复执行参数列表里的参数 , 返回值为受影响的行数
•conn.commit()提交事务
日常工作中,大多数会先拼接一个 SQL 语句 然后再执行,实现插入数据的操作:
In [7]: cur.execute('create table userinfo (username varchar(8),passwd varchar(8));') ##创建表写入数据
Out[7]: 0L
In [8]: cur.execute('insert into userinfo value("aaa","123");') ##单条插入数据
Out[8]: 1L
In [9]: sqli = 'insert into userinfo value (%s,%s)'
In [11]: cur.executemany(sqli,[('sss','123'),('ddd','123')]) ##多条插入数据
Out[11]: 2L
In [12]: cur.execute('select * from userinfo;') ##查询数据内容,execute只显示行数,不显示内容
Out[12]: 3L
In [13]: cur.fetc ##显示内容的三种用法
cur.fetchall cur.fetchmany cur.fetchone
In [13]: cur.fetchone() ##一行一行显示
Out[13]: ('aaa', '123')
In [14]: cur.fetchone()
Out[14]: ('sss', '123')
In [15]: cur.fetchone()
Out[15]: ('ddd', '123')
In [16]: cur.fetchone() ##读完后游标指在最后
In [17]: cur.fetchall()
Out[17]: ()
In [18]: cur.scroll(0,'absolute')
In [19]: cur.fetchall() ##fetchall(self): 接收全部的返回结果行
Out[19]: (('aaa', '123'), ('sss', '123'), ('ddd', '123'))
In [20]: cur.fetc()
cur.fetchall cur.fetchmany cur.fetchone
In [20]: cur.fetchmany(3)
Out[20]: ()
In [21]: cur.scroll(0,'absolute') ##从结果集的第一行移动0条,即游标移动到开头
In [22]: cur.fetchmany(3)
Out[22]: (('aaa', '123'), ('sss', '123'), ('ddd', '123'))
In [23]: conn.commit() ##conn.commit()提交数据,提交后操作才可生效
In [24]: cur.close()
In [25]: conn.close()
• fetchmany(size=None): 接收 size 条返回结果行 . 如果 size 的值大于返回的结果行的数量 , 则会返回 cursor.arraysize 条数据 . • scroll(value, mode='relative'): 移动指针到某一行 .如果 mode='relative', 则表示从当前所在行移动 value 条 ; 如果 mode='absolute', 则表示从结果集的第一行移动 value 条;