【python】数据库使用总结

近期工作中需要写个小脚本定期对数据库做一些处理,当然脚本是要用python写的了,然后跟数据库打交道就用了最基本的MySQLdb-python包。下面简单对MySQLdb的使用做个小结:

python支持的数据库列表

作为一款使用较普遍的开发语言,python对很多数据库接口都提供了支持,用户可以访问[Python DB-API]查看详细的数据库支持列表。

用户可以根据自己的项目需要选择合适的数据库,然后在[Python DB-API]中下载安装对应的接口插件,python对数据库的访问流程大致如下:

  • 引入数据库API模块
  • 获取与数据库连接
  • 执行SQL语句或者存储过程
  • 关闭数据库连接

常见数据库接口的接口插件下载地址如下:

python MySQL数据库接口

由于笔者使用的是MySQL数据库,所以下面主要通过笔者通过python使用MySQL来介绍整个插件安装,代码过程:

1.安装Python MySQL数据库接口插件

如前文介绍,在MySQL上下载对应操作系统(Windows\Ubuntu等)、Python版本(2.7\3.3等)、对应操作系统位数(x86\x64等)的数据库接口安装版本,按照步骤安装完成即可。

版本选择

下载MySQL-python插件:

尤其windows 64位的,找了半天终于找到这里了:http://www.codegood.com/downloads

2.编写Python代码操作数据库

一般下载插件的网站上都会提供用户使用手册,开始写自己的代码前可以先读一下官方提供的代码样例:

代码样例

  • 连接数据库:
import mysql.connector
cnx = mysql.connector.connect(user='scott', password='tiger',
                              host='127.0.0.1',
                              database='employees')
cnx.close()
  • 数据库操作:
#-*-coding:utf-8-*-
'''
Created on 2016年12月15日
@author: Eldon
'''
from mysql import connector as sql_conn
from mysql.connector import errorcode
class MySQL(object):
    '''
    classdocs
    '''
    CONN_PARAMS = {
    'user': 'root',
    'password': 'root',
    'host': 'localhost',
    'database': '',
    'raise_on_warnings': 'True',
    }
    DATABASE_NAME = 'eldon'
    DB_TABLES = {}
    DB_TABLES['test'] = (
        '''
        CRATE TABLE `test` (
            `param1` int(11) NOT NULL AUTO_INCREMENT,
            `param2` varchar(11) NOT NULL,
            `param3` enum('M', 'F') NOT NULL,
            `param4` date,
            PRIMARY KEY (col1)
        ) ENGINE=InnoDB
        '''
    )
    INSERT_DDL = (test_insert,) = (("INSERT INTO test (param1, param2, param3, param4) VALUES (%s, %s, %s, %s)"),)
    QUERY_DDL = (test_query,) = (("SELECT * FROM test"),)
    QUERY_DDL = (test_delete,) = (("DELETE FROM test"),)
    def __init__(self, params):
        '''
        Constructor
        '''
        self.conn = sql_conn.connect(**self.CONN_PARAMS)
        self.curs = self.conn.cursor
    def __del__(self):
        if self.conn:
            self.conn.close()
    def create_database(self):
        try:
            self.curs.database = self.DATABASE_NAME
        except sql_conn.Error as err:
            if errorcode.ER_BAD_DB_ERROR == err.errno:
                try:
                    self.curs.execute("CREATE DATABASE {} DEFAULT CHARACTER SET 'utf-8'".format(self.DATABASE_NAME))
                    self.curs.database = self.DATABASE_NAME
                except sql_conn.Error as ex:
                    print "Failed creating database: {}".format(ex)
                    self.conn.close()
                    exit(1)
            else:
                print "get database failed: {}".format(err)
                self.conn.close()
                exit(1)
    def create_table(self):
        for name, ddl in self.DB_TABLES.iteritems():
            try:
                print "Creating table {}:".format(name)
                self.curs.execute(ddl)
            except sql_conn.Error as err:
                if errorcode.ER_TABLE_EXISTS_ERROR == err.errno:
                    print "Table {} already exists.".format(name)
                else:
                    print "Create table {} success.".format(name)
            else:
                print "OK"
    def insert_record(self, table_name, *column):
        self.curs.execute(self["%s_insert" % table_name], column)
        self.conn.commit()
    def query_record(self, table_name):
        self.curs.execute(self["%s_query" % table_name])
        for record in self.curs:
            print record
    def delete_record(self, table_name):
        try:
            self.curs.execute(self["%s_delete" % table_name])
        except Exception as ex:
            print "Delete {} record faild: {}".format(table_name, ex)
            self.conn.rollback()
  • 异常处理
    Python DB API中常见的错误类型如下:
异常 描述
Warning 当有严重警告时触发,例如插入数据被截断等,是StandardError的子类
Error 警告意外其他所有错误类,是StandardError的子类
InterfaceError 数据接口本身错误触发,是Error子类
DatabaseError 数据库有关的错误触发,是Error子类
DataError 数据处理发生错误时触发(除零错误、数据超范围等),是DatabaseError子类
OperationError 非用户控制的操作数据库时发生的错误(连接意外断开、数据库名未找到、事务处理失败、内存分配错误等),是DatabaseError子类
IntegrityError 完整性相关的错误(外键检查失败等),是DatabaseError子类
InternalError 数据库内部错误(游标失效、事务同步失败等),是DatabaseError子类
Paramgramming 程序错误(数据表没找到\已存在、SQL语法错误、参数数量错误等),是DatabaseError子类
NotSupportedError 不支持错误,使用了数据库不支持的函数或者API等(使用.rollback()但是数据库不支持事务),是DatabaseError子类。

参考资料:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容