python学习之Mysql

来源:互联网 发布:淘宝有枪买吗 编辑:程序博客网 时间:2024/06/06 03:48
#######MySQL 数据库使用 ########
1.MySQL
MySQL 是 Web 世界中使用最广泛的数据库服务器。
MySQL 内部有多种数据库引擎,最常用的引擎是支持数据库事务的 InnoDB。
安装MySQL
• 一定要进行设置密码,确保数据库安全;
• 配置文件为/etc/my.cnf 写入charset='utf8';
• 修改数据库默认的编码全部改为 UTF­8;
• 查看编码格式:show variables like '%char%';
• 安装MySQL­python,封装了 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            ## 修改数据库默认的编码全部改为 UTF­8,解决汉字的问题
 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 条;




原创粉丝点击