python操作MySQL数据库

要想使python可以操作mysql 就需要MySQL-python驱动,它是python 操作mysql必不可少的模块。

下载地址:https://pypi.python.org/pypi/MySQL-python/

下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录:

python setup.py install

测试非常简单,检查MySQLdb 模块是否可以正常导入。没有报错提示MySQLdb模块找不到,说明安装OK

fnngj@fnngj-H24X:~/pyse$ python
Python 2.7.4 (default, Sep 26 2013, 03:20:56)
[GCC 4.7.3] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.

import MySQLdb
数据库的连接

模块引入之后我们就需要和数据库进行连接了,实例代码如下:

db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )

这三个关键参数的含义一目了然:第一个为服务器的地址,第二个为用户名,第三个为dbms密码,第四个为要访问的数据库,其实该connect函数的参数不止这些,不过由于其有默认值而且大多数情况下不用修改,因而省略了。这里做如下列表:

host,连接的数据库服务器主机名,默认为本地主机(localhost)。

user,连接数据库的用户名,默认为当前用户。

passwd,连接密码,没有默认值。

db,连接的数据库名,没有默认值。

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions

cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。

compress,启用协议压缩功能。

named_pipe,在windows中,与一个命名管道相连接。

init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。

read_default_file,使用指定的MySQL配置文件。

read_default_group,读取的默认组。

unix_socket,在unix中,连接使用的套接字,默认使用TCP。

port,指定数据库服务器的连接端口,默认是3306

大家可能会注意到源码中没有用到端口号,这是因为MySQLdb的connect函数的该参数的默认值便是3306,如果你在安装mysql的时候修改了数据库的端口号,那么你就需要在源码中加上该参数的修改值了。

执行sql语句

连接上之后便是执行sql语句了,源代码如下:

import MySQLdb
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
sql = “”“insert into article values (0,”woainimahah”,”http://www.aa.com“,”2012-9-8”,”wo”,”qq”,”skjfasklfj”,”2019”,”up”)”“”
try:
cursor.execute(sql)
db.commit()
except:
db.rollback()
db.close

这里需要注意的是一定要记得commit,如果不提交那么数据库是不会有变化的

将sql语句改变成其他,便可以实现其他静态的操作,如“delete from article where id > 3”

选择和打印

连接数据库最重要的目的便是读取数据库中的信息,那么如何获取数据库中的数据呢?如何提取有效的信息呢?见如下代码:

下面的程序可以实现打印数据库中article表中所有行的第二列的数据:

import MySQLdb
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article”)
data = cursor.fetchone()
while data!=None:
print data[1]
data = cursor.fetchone()
db.close

我们也可以使用如下代码:

import MySQLdb
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article”)
datas = cursor.fetchall()
for data in datas:
print data[1]
print cursor.rowcount,”rows in tatal”
db.close

我们可以从代码中看出上面的各个函数的区别:

fetchone是从数据库表中取出一行记录,第二次调用便取出next行,不断向下走

fetchall取出数据库表中所有行的数据

rowcount读出数据库表中的行数

和java中的占位符一样,python中也需要这些占位符来实现动态的选择。见如下代码:

import MySQLdb
a = “down”
b = 4
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
cursor.execute(“select * from article where trend = ‘%s’ and id < ‘%d’”%(a,b))
datas = cursor.fetchall()
for data in datas:
print data[1]
print cursor.rowcount,”rows in tatal”
db.close

这里的占位符和java中的?占位符还有一点区别,那就是它声明了类型,和C中的格式输出是一样的。注意后面的%

那么返回的data也是一个列表,通过使用[]操作符来访问特定列的数据。

静态插入和动态插入

静态插入上面我们已经讲了,那么下面我们再讲一下动态插入

动态插入也是用占位符来实现的

import MySQLdb
title = “wangxinmeiwo”
url = “henxiangni ”
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
sql = “”“insert into article values (0,”%s”,”%s”,”2012-9-8”,”wo”,”qq”,”skjfasklfj”,”2019”,”up”)”“”
try:
cursor.execute(sql%(title,url))
db.commit()
except:
db.rollback()
db.close

可以看到这里的占位符和上面的使用方式是一样的

update操作

占位符的使用和上面是一样的

import MySQLdb
title = “haoxiangni”
id=11
db = MySQLdb.connect(“localhost”,”root”,”123456”,”myciti” )
cursor = db.cursor()
sql = “”“update article set title = “%s” where id = “%d” “””
try:
cursor.execute(sql%(title,id))
db.commit()
except:
db.rollback()
db.close

查询后中文会正确显示,但在数据库中却是乱码的。经过我从网上查找,发现用一个属性有可搞定:

在Python代码

conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’) 中加一个属性:
改为:
conn = MySQLdb.Connect(host=’localhost’, user=’root’, passwd=’root’, db=’python’,charset=’utf8’)
charset是要跟你数据库的编码一样,如果是数据库是gb2312 ,则写charset=’gb2312’。

下面贴一下常用的函数:

然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集
cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode=’relative’):移动指针到某一行.如果mode=’relative’,则表示从当前所在行移动value条,如果 mode=’absolute’,则表示从结果集的第一行移动value条.

参考资料:

MySQLdb‘s user guide

package MySQLdb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip毕设新项目-基于Java开发的智慧养老院信息管理系统源码+数据库(含vue前端源码).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值