博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python+MySQL学习笔记(一)
阅读量:5278 次
发布时间:2019-06-14

本文共 3023 字,大约阅读时间需要 10 分钟。

Python其实是可以操纵数据库的,想想如果能在python里写SQL语句,从而直接达到操纵数据库的目的,how cool!

Python的标准数据库接口为Python DB-API,针对不同的数据库要安装不同的模块,其中,MySQLdb就是用于链接MySQL数据库的接口。

安装MySQLdb,可以在 http://sourceforge.net/projects/mysql-python 找到安装包,下载安装即可,无需多余的设置。

使用流程大致如下:

  1. 导入MySQLdb模块
  2. 获取与数据库的连接
  3. 执行SQL语句,同时刷新数据库
  4. 关闭数据库连接

接下里分开记录数据库连接、创建数据库表、数据库插入操作、查询操作、更新操作、删除操作和错误处理

  1. 数据库连接

     

    # 导入模块

    import MySQLdb

    # 数据库连接

    db = MySQLdb.connect(host= "localhost", user='****', passwd='****', db='****')

     

数据库连接比较简单,格式也都是固定的,注意在连接前,确保用户拥有操纵某个数据库的权限

  1. 创建数据库表

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = 'localhost', user = 'wpy', passwd = '2016', db = 'testdb')

    # 获取游标

    cursor = db.cursor()

    # cursor的execute方法可以执行SQL

    # 如果表EMPLOYEE存在则删除

    cursor.execute('DROP TABLE IF EXISTS EMPLOYEE')

     

    sql = 'CREATE TABLE EMPLOYEE(\

    NAME VARCHAR(10) PRIMARY KEY,\

    AGE INT,\

    SEX VARCHAR(1))'

    cursor.execute(sql)

    # 关闭游标

    cursor.close()

    # 关闭数据库连接

    db.close()

     

    在powershell中查看:

     

     

    没有问题!

     

  2. 数据库插入操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = 'localhost', user = 'wpy', passwd = '2016', db = 'testdb')

    # 获取游标

    cursor = db.cursor()

     

    # 插入一条记录

    sql = "INSERT INTO EMPLOYEE(NAME, AGE, SEX) VALUES ('Simon', 20, 'M')"

    try:

    cursor.execute(sql)

    # 一定要commit()一下数据库才会被更新

    db.commit()

    except:

    db.rollback()

     

    # 插入多条记录

    values = [('Lucy', 21, 'W'), ('Tom', 19, 'M')]

    # 必须是%s,且没有引号,%d是不行的

    sql = "INSERT INTO EMPLOYEE(NAME, AGE, SEX) VALUES (%s, %s, %s)"

    try:

    cursor.executemany(sql, values)

    db.commit()

    except:

    db.rollback()

     

    # 关闭游标

    cursor.close()

    # 关闭数据库连接

    db.close()

     

    结果如下:

     

     

  3. 数据库查询操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = 'localhost', user = 'wpy', passwd = '2016', db = 'testdb')

    # 获取游标

    cursor = db.cursor()

     

    # SQL查询语句

    sql = "SELECT * FROM EMPLOYEE WHERE AGE >= '%d'" % (20)

     

    try:

    cursor.execute(sql)

    # 获取所有记录

    rows = cursor.fetchall()

    for row in rows:

    print 'Name:', row[0], 'Age:', row[1], 'Sex:', row[2]

    except:

    print 'Error, return nothing.'

    # 关闭游标

    cursor.close()

    # 关闭数据库连接

    db.close()

     

    结果如下:

     

    Cursor还有两个方法,fetchone()和fetchmany(size=)

    fetchmany(size=)比较简单,可以控制返回的行数

    fetchone()的意义在于逐行获取,因为每使用一次fetch,游标的位置就会发生改变,结果也看得出来,不过这也正是游标的意义所在了

     

  4. 数据库更新操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = 'localhost', user = 'wpy', passwd = '2016', db = 'testdb')

    # 获取游标

    cursor = db.cursor()

     

    # SQL更新语句

    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE AGE >= '%d'" % (20)

     

    try:

    cursor.execute(sql)

    db.commit()

    except:

    db.rollback()

    # 关闭游标

    cursor.close()

    # 关闭数据库连接

    db.close()

     

    数据库更新操作还是比较简单,注意别忘了db.commit()

  5. 数据库删除操作

     

    # -*- coding:utf-8 -*-

    import MySQLdb

    db = MySQLdb.connect(host = 'localhost', user = 'wpy', passwd = '2016', db = 'testdb')

    # 获取游标

    cursor = db.cursor()

     

    # SQL删除语句

    sql = "DELETE FROM EMPLOYEE WHERE AGE < '%d'" % (20)

     

    try:

    cursor.execute(sql)

    db.commit()

    except:

    db.rollback()

    # 关闭游标

    cursor.close()

    # 关闭数据库连接

    db.close()

     

    比较简单,不多说

     

    总结:MySQLdb的语法还是比较简单的,步骤也很单一,除了SQL不同之外,整体框架大体上没有发生太大的改变。还是那句话,SQL是根本,只有掌握好SQL才能执行更为复杂的操作。

    其实MySQLdb的语法远不止这些,不过这些就已经够用,如果想深入学习,可以参考官方网站http://dev.mysql.com/doc/connector-python/en/

     

    参考资料:

                   

                   

转载于:https://www.cnblogs.com/lucifer25/p/5782007.html

你可能感兴趣的文章
LLBL Gen Pro 设计器使用指南
查看>>
SetCapture() & ReleaseCapture() 捕获窗口外的【松开左键事件】: WM_LBUTTONUP
查看>>
Android 设置界面的圆角选项
查看>>
百度地图api服务端根据经纬度得到地址
查看>>
CSS中隐藏内容的3种方法及属性值
查看>>
每天一个linux命令(1):ls命令
查看>>
根据xml生成相应的对象类
查看>>
查看ASP.NET : ViewState
查看>>
Android StageFrightMediaScanner源码解析
查看>>
vue项目中开启Eslint碰到的一些问题及其规范
查看>>
循环队列实现
查看>>
CSS层模型
查看>>
springBoot 项目 jar/war打包 并运行
查看>>
HDU 1501 Zipper
查看>>
打包java程序生成exe
查看>>
八叉树
查看>>
poj 1129 搜索
查看>>
Git 远程仓库
查看>>
HttpClient的巨坑
查看>>
关于静态文本框透明度的问题
查看>>