python中的MySQL数据库

一. 数据库

1. mariadb的安装与使用

yum install -y mariadb-server        #安装

systemctl start mariadb

mysql_secure_installation            #初始化并设定密码

mysql -uroot -p密码

2. 数据库基本操作

show databases;                           #查看库

create database hello;                  #创建库

use hello;                                        #进入库

show tables;                                   #查看表


create table userinfo();                          #创建表

desc userinfo;                                         #列出表头

insert into userinfo values("user1","123");    #插入信息

select * from userinfo;                                     #查看表


注:mariadb中文编码出现问题

update userinfo set password="345" where username="user1";        #更新表信息

delete from userinfo where username="user1";                                     #删除表信息


drop table userinfo;                            #删除表

drop database hello;                          #删除库

注:配置文件为/etc/my.cnf

3. 中文编码问题

永久设置:

client:vim /etc/my.cnf.d/client.cnf

[client]
    default-character-set=utf8

server:vim /etc/my.cnf.d/server.cnf

[mysqld]
    character-set-server=utf8

systemctl restart mariadb

临时设置:

show variables like "char%";                  #查看编码格式

set character_set_database="utf8";     #修改数据库默认的编码改为utf8

set character_set_server="utf8";


eg:


二. python中数据库的操作

yum search python | grep -i 'mysql'

yum install MySQL-python.x86_64 -y

1. 建立MySQL连接

import MySQLdb as mysql   #导入MySQLdb模块并起别名mysql

mysql.connect(user="root",passwd="redhat",host='127.0.0.1',charset='utf8')


2. MySQL连接操作及游标操作

cur = conn.cursor()                   #创建游标指针

conn.select_db('sky')               #选择进入数据库

cur.execute("select * from skyinfo;")           #执行单条 sql 语句

cur.execute('insert into skyinfo values("user2","123");')       #执行单条 sql 语句

conn.commit()                          #如果数据库表进行了修改,提交保存当前的数据


检测:


cur.close()        #关闭游标

conn.close()     #断开连接


3. 多条语句执行

方法一:多次执行,但效率低

cur.execute('insert into userinfo values("user", "123");')


方法二:选择传入变量, 然后for循环执行

sqli = 'insert into skyinfo values("%s", "%s");' %("user", "123")

cur.execute(sqli)

方法三:executemany方法, 直接传入列表, 实现数据多行添加

executemany(query, args): 执行单条 sql 语句 , 但是重复执行参数列表里的参数 , 返回值为受影响的行数

li = [("user5", "123"), ("user6", "234"), ("user7", "456")]

sqli = 'insert into skyinfo values("%s","%s");'

for i in li:

    cur.execute(sqli, i)

cur.executemany(sqli,li)


4. 查看表内容

1>fetchone() 查看一条信息, 指针向后移动

2>scroll() 移动指针

scroll(value, mode='relative'): 移动指针到某一行

如果 mode='relative', 则表示从当前所在行移动 value 条

如果 mode='absolute', 则表示从结果集的第一行移动 value 条


3>fetchmany(n) 显示n条信息

4>fetchall() 显示所有信息


eg1:

随机生成10个人名和对应的密码,人名由三个汉字或者2个汉字组成,密码统一6位, 由字母和数字组成,存储至数据库sky的skyinfo表中


检测:


eg2:判断某个数据库表是否存在


eg3:封装MySQLdb

1>封装一个数据库类为MyMySQL

2>实例化对象时, 自动连接数据库, 自动创建游标

3>删除实例化对象时, 自动关闭游标, 断开数据库连接

4>编写select_table(self, table_name, num)方法, 显示该表里面的n条数据

5>编写create_table(self, table_name, **attr )方法, 实现创建表, 创建前判断表是否存在, **attr是表的属性名




测试:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章