zoukankan      html  css  js  c++  java
  • Python+MySQL学习笔记(一)

    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/

      参考资料:http://www.runoob.com/python/python-mysql.html

                     http://www.cnblogs.com/coser/archive/2012/01/12/2320741.html

                     http://blog.csdn.net/lengyue318/article/details/7913427

    却道,此心安处是吾乡
  • 相关阅读:
    start tag, end tag issues in IE7, particularly in xslt transformation
    用SandCastle为注释生成chm文档
    Firebug
    架构的重点
    Linux Shell常用技巧(十) 管道组合
    Linux JDK升级
    Linux Shell常用技巧(十二) Shell编程
    Packet Tracer 5.0实验(一) 交换机的基本配置与管理
    Linux Shell常用技巧(六) sort uniq tar split
    Linux Shell常用技巧(二) grep
  • 原文地址:https://www.cnblogs.com/lucifer25/p/5782007.html
Copyright © 2011-2022 走看看