python MySQLdb pymsql

参考文档 https://www.python.org/dev/peps/pep-0249/#nextset

本节内容

  • MySQLdb 
  • pymysql

MySQLdb和pymysql分别为Python2和Python3操作MySQL数据库的模块,两个模块的用法基本相同, 这里就把两个模块放到一起说下用Python如何来操作MySQL数据库。

一。MySQLdb的使用

1.导入模块

import MySQLdb 

2.建立连接,获取连接对象

在建立数据库连接时connect函数中可以接收多个参数,返回的为连接对象

connect参数说明如下↓

"""

Create a connection to the database. It is strongly recommended
that you only use keyword parameters. Consult the MySQL C API
documentation for more information.

host
  string, host to connect

user
  string, user to connect as

passwd
  string, password to use

db
  string, database to use

port
  integer, TCP/IP port to connect to

unix_socket
  string, location of unix_socket to use

conv
  conversion dictionary, see MySQLdb.converters

connect_timeout
  number of seconds to wait before the connection attempt
  fails.

compress
  if set, compression is enabled

named_pipe
  if set, a named pipe is used to connect (Windows only)

init_command
  command which is run once the connection is created

read_default_file
  file from which default client values are read

read_default_group
  configuration group to use from the default file

cursorclass
  class object, used to create cursors (keyword only)

use_unicode
  If True, text-like columns are returned as unicode objects
  using the connection‘s character set.  Otherwise, text-like
  columns are returned as strings.  columns are returned as
  normal strings. Unicode objects will always be encoded to
  the connection‘s character set regardless of this setting.

charset
  If supplied, the connection character set will be changed
  to this character set (MySQL-4.1 and newer). This implies
  use_unicode=True.

sql_mode
  If supplied, the session SQL mode will be changed to this
  setting (MySQL-4.1 and newer). For more details and legal
  values, see the MySQL documentation.

client_flag
  integer, flags to use or 0
  (see MySQL docs or constants/CLIENTS.py)

ssl
  dictionary or mapping, contains SSL connection parameters;
  see the MySQL documentation for more details
  (mysql_ssl_set()).  If this is set, and the client does not
  support SSL, NotSupportedError will be raised.

local_infile
  integer, non-zero enables LOAD LOCAL INFILE; zero disables

There are a number of undocumented, non-standard methods. See the
documentation for the MySQL C API for some hints on what they do.

"""

conn = MySQLdb.connect(host=‘192.168.10.165‘, port=3306, user=‘root‘, passwd=‘123456‘, db=‘center‘)     # 和数据库建立连接

3.创建一个游标来进行数据库操作

游标默认返回的数据类型为tuple,当加入cursorclass=MySQLdb.cursors.DictCursor时,返回的数据类型为dict

cursor = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)

4.利用游标对象进行数据库操作

数据操作主要分为执行sql和返回数据

下面为cursor用来执行命令的方法:

callproc(self, procname, args)    # 用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args)        # 执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args)    # 执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self)                     # 移动到下一个结果集 

executemany处理过多的命令也不见得一定好,因为数据一起传入到server端,可能会造成server端的buffer溢出,而一次数据量过大,也有可能产生一些意想不到的麻烦。合理,分批次executemany是个不错的办法。

下面为cursor用来接收返回值的方法:

fetchall(self)      # 接收全部的返回结果行.
fetchmany(self, size=None)      # 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self)      # 返回一条结果行.
scroll(self, value, mode=‘relative‘)        # 移动指针到某一行.如果mode=‘relative‘,则表示从当前所在行移动value条,如果mode=‘absolute‘,则表示从结果集的第一行移动value条. 

接下来看一完整的例子:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = ‘40kuai‘

import MySQLdb  # 导入模块
conn = MySQLdb.connect(host=‘192.168.10.165‘, port=3306, user=‘root‘, passwd=‘123456‘, db=‘db‘)     # 和数据库建立连接
cursor = conn.cursor()  # 获取游标进行数据操作
# 查询
effect_row = cursor.executemany("select * from user limit %s ",(10,))  # 返回受影响行数
print effect_row # 返回为受影响的条数
print cursor.fetchone()     # 打印一条返回结果
print ‘‘.center(50,‘#‘)
print cursor.fetchall()     # 返回所有的数据,这里为剩余的数据
cursor.scroll(0,mode=‘absolute‘)        # 重置游标位置
print cursor.fetchone()

# 提交,不然无法保存新建或者修改的数据,这里为查询操作可以不写
conn.commit()

# 关闭游标
cursor.close()
# 关闭连接
conn.close()

# 输出(大概)# 10# (10001L,‘40kuai‘,1476858893L)# ################################################### ((10002L,‘41kuai‘,1476858893L),......)  # 后边数据省略# (10001L,‘40kuai‘,1476858893L)

5.对数据库进行操作时注意事项:

  • 使用sql语句,这里要接收的参数都用%s占位符.要注意的是, 无论你要插入的数据是什么类型,占位符永远都要用%s 
  • param应该为tuple或者list 
  • 使用executemany添加多条数据时,每个传入参数的集合为一个tuple,整个参数组成一个tuple,或者list
  • 返回数据为字典类型可以在创建数据库连接(connection)时传入cursorclass=MySQLdb.cursors.DictCursor,或者在创建游标时(cursor)加入参数cursorclass=MySQLdb.cursors.DictCursor
  • --在conntction中加入cursorclass=MySQLdb.cursors.DictCursor会报错(‘module‘ object has no attribute ‘cursors‘),应该是有与对象还没有实例化没有cursors方法。

6.查询数据后的一些收尾工作

在对数据进行操作时需要说明两个函数,commit和rollback

如果使用支持事务的存储引擎,那么每次操作后,commit是必须的,否则不会真正写入数据库(查询操作可以不执行commit),对应rollback可以进行相应的回滚,但是commit后是无法再rollback的。commit() 可以在执行很多sql指令后再一次调用,这样可以适当提升性能。

# 需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()

5.查询数据后的一些收尾工作

5.查询数据后的一些收尾工作

时间: 2024-12-30 12:27:32

python MySQLdb pymsql的相关文章

python MySQLdb在windows环境下的快速安装、问题解决方式

使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.net/wklken/article/details/7271019 ------------------------------------------------------------- 以下是windows环境下的: 1.      安装数据库mysql 下载地址:http://www.mysql.com/downloa

Python MySQLdb

数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME. 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,My

Python MySQLdb Linux下安装笔记

本文介绍了Python MySQLdb Linux下安装笔记,本文分别讲解了快速安装和手动编译安装两种方法,并分别讲解了操作步骤,需要的朋友可以参考下 主要针对centos6.5 64位系统 默认python版本为2.6 编码安装python2.7和python3.4      一.yum快速安装 yum install MySQL-python yum install python-setuptools 经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到eas

python MySQLdb 常用操作

我采用的是MySQLdb操作的MYSQL数据库.先来一个简单的例子吧: import MySQLdb try:     conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test',port=3306)     cur=conn.cursor()     cur.execute('select * from user')     cur.close()     conn.close() except MySQL

python MySQLdb用法

数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME. 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令. 在你的机子上已经安装了 Pyt

python MySQLdb连接mysql失败

Traceback (most recent call last):   File "./test_db.py", line 12, in < module>     db='mysite')   File "build/bdist.linux-x86_64/egg/MySQLdb/__init__.py", line 81, in Connect   File "build/bdist.linux-x86_64/egg/MySQLdb/con

PYTHON -MYSQLDB安装遇到的问题和解决办法

目前下载的mysqldb在window下没有exe安装包了,只有源码. 使用python setup.py install 命令安装, 报错如下: 异常信息如下: F:\devtools\MySQL-python-1.2.3>pythonsetup.py build Traceback (most recent call last): File "setup.py", line 15, in <module> metadata, options = get_confi

Python MySQLdb模块连接操作mysql数据库实例_python

mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/有下载和文档. 由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码: #-*- encoding: gb2312 -*- import os, sys, string impo

python MySQLdb连接mysql失败(转载)

最近了解了一下django,数据库选用了mysql, 在连接数据库的过程中,遇到一点小问题,在这里记录一下,希望能够对遇到同样的问题的朋友有所帮助,少走一些弯路.关于django,想在这里也额外说一句.django是很优秀的基于python的web开发框架,对于有python基础的后台程序员,如果有要做一些前台的需求,强烈推荐django.下面言归正传. 1. 问题的现象 下面是连接数据库的代码,用的是python的MySQLdb模块: 1 2 3 4 5 db = MySQLdb.connec