跟老齐学Python之通过Python连接数据库


Posted in Python onOctober 28, 2014

用Python来编写网站,必须要能够通过python操作数据库,所谓操作数据库,就是通过python实现对数据的连接,以及对记录、字段的各种操作。上一讲提到的那种操作方式,是看官直接通过交互模式来操作数据库。

安装python-MySQLdb

要想通过python来操作数据库,还需要在已经安装了mysql的基础上安装一个称之为mysqldb的库,它是一个接口程序,python通过它对mysql数据实现各种操作。

在编程中,会遇到很多类似的接口程序,通过接口程序对另外一个对象进行操作,比较简单。接口程序就好比钥匙,如果要开锁,人直接用手指去捅,肯定是不行的,那么必须借助工具,插入到锁孔中,把所打开,打开所之后,门开了,就可以操作门里面的东西了。那么打开所的工具就是接口程序。而打开所的工具会有便利与否之分,如果用这锁的钥匙,就便利,如果用别的工具,或许不便利(其实还分人,也就是人开锁的水平,如果是江洋大盗或者小毛贼什么的,擅长开锁,用别的工具也便利了),也就是接口程序不同,编码水平不同,都是考虑因素。

这里下载python-mysqldb:https://pypi.python.org/pypi/MySQL-python/

下载之后就可以安装了。

我这里只能演示ubuntu下安装的过程。

sudo apt-get install python-MySQLdb

在shell中输入上面的命令行,就安装了。看看,多么简洁的安装,请快快用ubuntu吧。我愿意做ubuntu的免费代言。哈哈。

不管什么系统,安装不是难题。安装之后,怎么知道安装的结果呢?

>>> import MySQLdb

在python的交互模式中,输入上面的指令,如果不报错,恭喜你,已经安装好了。如果报错,恭喜你,可以借着错误信息提高自己的计算机水平了,请求助于google大神。

交互模式下操作数据库之连接数据库

操作数据库的前提是先有数据库。

先建立一个数据库。

qw@qw-Latitude-E4300:~$ mysql -u root -p

Enter password:  

打开数据库,正确输入密码之后,呈现下面的结果

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 373

Server version: 5.5.38-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

在这个状态下,输入如下命令,建立一个数据库:

mysql> create database qiwsirtest character set utf8;

Query OK, 1 row affected (0.00 sec)

注意上面的指令,如果仅仅输入:create database qiwsirtest,也可以,但是,我在后面增加了character set utf8,意思是所建立的数据库qiwsirtest,编码是utf-8的,这样存入汉字就不是乱码了。

看到那一行提示:Query OK, 1 row affected (0.00 sec),就说明这个数据库已经建立好了,名字叫做:qiwsirtest

数据库建立之后,就可以用python通过已经安装的mysqldb来连接这个名字叫做qiwsirtest的库了。进入到python交互模式(现在这个实验室做实验)。

>>> import MySQLdb

>>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="qiwsirtest",port=3306,charset="utf8")

逐个解释上述命令的含义:

host:等号的后面应该填写mysql数据库的地址,因为就数据库就在本机上(也称作本地),所以使用localhost,注意引号。如果在其它的服务器上,这里应该填写ip地址。一般中小型的网站,数据库和程序都是在同一台服务器(计算机)上,就使用localhost了。

user:登录数据库的用户名,这里一般填写"root",还是要注意引号。当然,如果是比较大型的服务,数据库会提供不同的用户,那时候可以更改为相应用户。但是,不同用户的权限可能不同,所以,在程序中,如果要操作数据库,还要注意所拥有的权限。在这里用root,就放心了,什么权限都有啦。不过,这样做,在大型系统中是应该避免的。

passwd:上述user账户对应的登录mysql的密码。我在上面的例子中用的密码是"123123"。不要忘记引号。

db:就是刚刚通create命令建立的数据库,我建立的数据库名字是"qiwsirtest",还是要注意引号。看官如果建立的数据库名字不是这个,就写自己所建数据库名字。

port:一般情况,mysql的默认端口是3306,当mysql被安装到服务器之后,为了能够允许网络访问,服务器(计算机)要提供一个访问端口给它。

charset:这个设置,在很多教程中都不写,结果在真正进行数据存储的时候,发现有乱码。这里我将qiwsirtest这个数据库的编码设置为utf-8格式,这样就允许存入汉字而无乱码了。注意,在mysql设置中,utf-8写成utf8,没有中间的横线。但是在python文件开头和其它地方设置编码格式的时候,要写成utf-8。切记!

注:connect中的host、user、passwd等可以不写,只有在写的时候按照host、user、passwd、db(可以不写)、port顺序写就可以,注意端口号port=3306还是不要省略的为好,如果没有db在port前面,直接写3306会报错.

其实,关于connect的参数还不少,下面摘抄来自mysqldb官方文档的内容,把所有的参数都列出来,还有相关说明,请看官认真阅读。不过,上面几个是常用的,其它的看情况使用。

Python 相关文章推荐
Python的Django框架中if标签的相关使用
Jul 15 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python 自动去除空行的实例
Jul 24 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
pandas数据处理进阶详解
Oct 11 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
python中绕过反爬虫的方法总结
Nov 25 Python
python 如何上传包到pypi
Dec 24 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
Jan 10 Python
Python对象体系深入分析
Oct 28 #Python
Python中类的继承代码实例
Oct 28 #Python
Python列表list数组array用法实例解析
Oct 28 #Python
python实现无证书加密解密实例
Oct 27 #Python
深入理解Python 代码优化详解
Oct 27 #Python
简单的Python抓taobao图片爬虫
Oct 26 #Python
Python性能优化的20条建议
Oct 25 #Python
You might like
php array_keys 返回数组的键名
2016/10/25 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
javascript的事件描述
2006/09/08 Javascript
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
改善用户体验的五款jQuery插件分享
2011/05/22 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
checkbox设置复选框的只读效果不让用户勾选
2013/08/12 Javascript
javascript实现动态标签云
2015/10/16 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
学习JavaScript设计模式之单例模式
2016/01/19 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
2016/12/17 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python递归下载文件夹下所有文件
2019/08/31 Python
css3中背景尺寸background-size详解
2014/09/02 HTML / CSS
Sneaker Studio匈牙利:购买运动鞋
2018/03/26 全球购物
新加坡网上美容店:Hermo新加坡
2019/06/19 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
英文求职信结束语大全
2013/10/26 职场文书
军训心得体会
2013/12/31 职场文书
倡议书格式范文
2014/04/14 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
幼儿园感谢信
2015/01/21 职场文书
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis