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

    却道,此心安处是吾乡
  • 相关阅读:
    Matlab之画图
    Evaluation
    Matlab之文件读写
    Matlab之cell使用
    Windows装机指南
    C之文件读写
    Linux之用户管理
    linux和Windows下文本格式转换
    round()
    pow()
  • 原文地址:https://www.cnblogs.com/lucifer25/p/5782007.html
Copyright © 2011-2022 走看看