一、安装、调试数据库
1.安装数据库,
2.开启数据库服务,并设置开机自启
3.数据库安全初始化
[root@localhost ~]# mysql_secure_installation
Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n ## 允许root用户远程登陆
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y
4.创建数据库westosdb,创建表userinfo
[root@localhost ~]# mysql -uroot -p
MariaDB [(none)]> create database westosdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [westosdb]> create table userinfo( username varchar(50) not null, password varchar(50) not null);
Query OK, 0 rows affected (0.10 sec)
MariaDB [westosdb]> desc userinfo;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(50) | NO | | NULL | |
| password | varchar(50) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
MariaDB [westosdb]> use mysql;
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
MariaDB [mysql]> show tables;
MariaDB [mysql]> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host | User | Password |
+-----------+------+-------------------------------------------+
| localhost | root | *28C1E2BE21B45562A34B6CC34A19CFAFC2F88F96 |
| 127.0.0.1 | root | *28C1E2BE21B45562A34B6CC34A19CFAFC2F88F96 |
| ::1 | root | *28C1E2BE21B45562A34B6CC34A19CFAFC2F88F96 |
+-----------+------+-------------------------------------------+
3 rows in set (0.00 sec)
5.创建远程用户,并授权;
MariaDB [(none)]> create user root@'%' identified by 'westos';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all on westosdb.* to root@'%';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show grants for root@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for root@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*28C1E2BE21B45562A34B6CC34A19CFAFC2F88F96' |
| GRANT ALL PRIVILEGES ON `westosdb`.* TO 'root'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
6.添加防火墙策略
[root@localhost ~]# firewall-cmd --permanent --add-service=mysql
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# netstat -antlpp | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3006/mysqld
tcp 0 0 172.25.254.2:3306 172.25.254.10:49202 ESTABLISHED 3006/mysqld
7.远程登陆数据库
[root@foundation10 Desktop]# mysql -h 172.25.254.2 -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 5.5.44-MariaDB MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> Ctrl-C -- exit!
Aborted
二、python中编辑数据库
conn = MySQLdb.connect(host='localhost', \
user='root',passwd='123456', \
db='testpython', \
port=3306,charset='utf8')
host : MySQL 数据库地址
user: 数据库登陆用户名
passwd: 数据库登陆密码
db: 登陆数据库后,需要操作的库名
port: 数据库监听端口,默认为 3306
charset: 数据库编码
MySQL连接操作
• commit() 如果数据库表进行了修改,提交保存当前的数据。
• rollback() 如果有权限,就取消当前的操作,否则报错
• cursor() 游标指针。
游标操作
# 创建一个数据库游标
In [3]: cur = conn.cursor()
cursor() 提供的方法来进行操作,方法主要是 :
1. 执行命令
2. 接收结果
cursor 执行命令的方法:
execute(query, args): 执行单条 sql 语句。 query 为 sql 语句本身, args 为参数值的列表。执行后返回值为受影响的行数。
executemany(query, args): 执行单条 sql 语句 , 但是重复执行参数列表里的参数 , 返回值为受影响的行数
conn.commit() ## 提交事务
1.安装MySQL-python
• 一定要进行设置密码,确保数据库安全;
• 配置文件为/etc/my.cnf;
• 修改数据库默认的编码全部改为 UTF8;
• 查看编码格式:show variables like ‘%char%’;
• 安装MySQLpython,封装了 MySQL C 驱动的 Python 驱动。
[root@foundation10 Desktop]# yum search python | grep -i mysql ## -i 忽略大小写
MySQL-python.x86_64 : An interface to MySQL
[root@foundation10 Desktop]# yum install MySQL-python.x86_64 -y
python2中测试
[root@foundation10 Desktop]# python2
Python 2.7.5 (default, Oct 11 2015, 17:47:16)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb as mysql
>>> mysql.connect(host='172.25.254.2',user='root',passwd='westos',db='westosdb')
<_mysql.connection open to '172.25.254.2' at 1c58040>
>>>
python3中测试
[root@foundation10 Desktop]# python3
Python 3.6.4 (default, Jun 1 2018, 18:57:40)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mysql
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'mysql'
## 缺少pymysql模块
1)安装pymysql
[root@foundation10 bin]# pip -V ## 查询pip版本(由于版本为2.7,则下载时需要用pip3)
pip 7.1.0 from /usr/lib/python2.7/site-packages (python 2.7)
[root@foundation10 Desktop]# cd /usr/local/python3/bin/
[root@foundation10 bin]# ./pip3 install pymysql
Collecting pymysql
Downloading https://files.pythonhosted.org/packages/32/e8/222d9e1c7821f935d6dba8d4c60b9985124149b35a9f93a84f0b98afc219/PyMySQL-0.8.1-py2.py3-none-any.whl (81kB)
100% |████████████████████████████████| 81kB 6.6kB/s
Installing collected packages: pymysql
Successfully installed pymysql-0.8.1
2)测试
[root@foundation10 bin]# python3
Python 3.6.4 (default, Jun 1 2018, 18:57:40)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pymysql ## 模块导入成功
>>> pymysql.connect(host='172.25.254.2',user='root',passwd='westos',db='westosdb')
<pymysql.connections.Connection object at 0x7f2cb504d7b8>
>>>
2.pycharm中编辑数据库
#表格中添加内容
import pymysql ## 导入pymysql模块
## 1. 连接数据库:
conn = pymysql.connect(host='172.25.254.2',
user='root',passwd='westos',
db='westosdb',charset='utf8')
# 2. 创建游标, 为了给数据库输入sql指令
cur = conn.cursor()
# 3. 对于数据库操作
##表格中添加内容
for num in range(10):
username = 'user' + str(num + 1)
insert_sqli = "insert into userinfo values('%s','%s');" %(username,'00000')
print("执行SQL:",insert_sqli)
cur.execute(insert_sqli) ##上传数据
conn.commit() ##提交事务(刷新)
# conn.autocommit(True) # 是否自动提交操作;
cur.close() ##关闭游标
conn.close() ## 关闭数据库连接
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/03_数据库.py
执行SQL: insert into userinfo values('user1','00000');
执行SQL: insert into userinfo values('user2','00000');
执行SQL: insert into userinfo values('user3','00000');
......
执行SQL: insert into userinfo values('user10','00000');
MariaDB [westosdb]> select * from userinfo;
+----------+----------+
| username | password |
+----------+----------+
| hello | 123 |
| user1 | westos |
| user1 | 00000 |
| user2 | 00000 |
| user3 | 00000 |
| user4 | 00000 |
| user5 | 00000 |
| user6 | 00000 |
| user7 | 00000 |
| user8 | 00000 |
| user9 | 00000 |
| user10 | 00000 |
+----------+----------+
12 rows in set (0.00 sec)
更新表格
import pymysql
conn = pymysql.connect(host='172.25.254.2',
user='root',passwd='westos',
db='westosdb',charset='utf8')
cur = conn.cursor()
try:
update_sqli = 'update userinfo set password=%s where username=%s'
update_li = [('6666', 'user'+str(num)) for num in range(5,11)]
cur.executemany(update_sqli, update_li)
except Exception as e:
print("更新失败:", e)
else:
print("更新成功!")
conn.commit()
cur.close()
conn.close()
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/03_数据库.py
更新成功!
MariaDB [westosdb]> select * from userinfo;
+----------+----------+
| username | password |
+----------+----------+
| hello | 123 |
| user1 | westos |
| user1 | 00000 |
| user2 | 00000 |
| user3 | 00000 |
| user4 | 00000 |
| user5 | 6666 |
| user6 | 6666 |
| user7 | 6666 |
| user8 | 6666 |
| user9 | 6666 |
| user10 | 6666 |
+----------+----------+
12 rows in set (0.00 sec)
查看表
1.查看表的数据条数
import pymysql
conn = pymysql.connect(host='172.25.254.2',
user='root',passwd='westos',
db='westosdb',charset='utf8')
cur = conn.cursor()
res = cur.execute('select * from userinfo;')
print("表的数据条数:", res)
conn.commit()
cur.close()
conn.close()
查看表的内容
• fetchall(self): 接收全部的返回结果行 .
• fetchmany(size=None): 接收 size 条返回结果行 . 如果 size 的值大于返回的结果行的数量 , 则会返回 cursor.arraysize 条数据 .
• fetchone(): 返回一条结果行 .
import pymysql
conn = pymysql.connect(host='172.25.254.2',
user='root',passwd='westos',
db='westosdb',charset='utf8')
cur = conn.cursor()
res = cur.execute('select * from userinfo;')
print("表的数据条数:", res)
print(cur.fetchone()) ##查看表格的一行内容,显示为元组
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchmany(size=5)) ##查看5行内容,从指针位置开始之后的五行
print(cur.fetchall()) # 查看从指针位置开始之后的内容
conn.commit()
cur.close()
conn.close()
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/03_数据库.py
表的数据条数: 12
('hello', '123')
('user1', 'westos')
('user1', '00000')
(('user2', '00000'), ('user3', '00000'), ('user4', '00000'), ('user5', '6666'), ('user6', '6666'))
(('user7', '6666'), ('user8', '6666'), ('user9', '6666'), ('user10', '6666'))
移动指针
• scroll(value, mode='relative'): 移动指针到某一行 .
如果 mode='relative', 则表示从当前所在行移动 value 条 (正数:向下移动;负数:向上移动);
如果 mode='absolute', 则表示从结果集的第一行移动 value 条(正数:向下移动;负数:向上移动);
相对路径
import pymysql
conn = pymysql.connect(host='172.25.254.2',
user='root',passwd='westos',
db='westosdb',charset='utf8')
cur = conn.cursor()
res = cur.execute('select * from userinfo;')
print("表的数据条数:", res)
print(cur.fetchall())
cur.scroll(-1,'relative') # 根据当前位置向左移动一个指针;
print(cur.fetchmany(2))
conn.commit()
cur.close()
conn.close()
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/03_数据库.py
表的数据条数: 12
(('hello', '123'), ('user1', 'westos'), ('user1', '00000'), ('user2', '00000'), ('user3', '00000'), ('user4', '00000'), ('user5', '6666'), ('user6', '6666'), ('user7', '6666'), ('user8', '6666'), ('user9', '6666'), ('user10', '6666'))
(('user8', '6666'), ('user9', '6666'))
绝对路径
print(cur.fetchall())
cur.scroll(1, mode='absolute') # 绝对路径, 从第一行向下移动1行;
print(cur.fetchone())
/usr/local/python3/bin/python3.6 /root/PycharmProjects/day10/03_数据库.py
表的数据条数: 12
(('hello', '123'), ('user1', 'westos'), ('user1', '00000'), ('user2', '00000'), ('user3', '00000'), ('user4', '00000'), ('user5', '6666'), ('user6', '6666'), ('user7', '6666'), ('user8', '6666'), ('user9', '6666'), ('user10', '6666'))
('user1', 'westos')