python笔记二(mysql数据库操作)

python2.x使用MySQLdb

python3.x使用pymysql代替MySQLdb

不过我使用的是python3.5,MySQLdb还是可以在python3.5使用的。

  1 #!/usr/bin/env python
  2 # _*_ coding:utf-8 _*_
  3 import pymysql
  4 import MySQLdb
  5 
  6 # 打开数据库连接
  7 db = pymysql.connect("10.35.22.91", "root", "adminadmin", "TESTDB")
  8 '''
  9 db = MySQLdb.connect(host='10.35.22.91',
 10                         user='root',
 11                         port = 3306,
 12                         passwd ='adminadmin',
 13                         db='scrapydb',
 14                         charset='utf8')
 15 '''
 16 # 使用 cursor() 方法创建一个游标对象 cursor
 17 cursor = db.cursor()
 18 
 19 # 使用 execute() 方法执行 SQL,如果表存在则删除
 20 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
 21 # 使用预处理语句创建表
 22 sql = """CREATE TABLE EMPLOYEE (
 23          FIRST_NAME  CHAR(20) NOT NULL,
 24          LAST_NAME  CHAR(20),
 25          AGE INT,  
 26          SEX CHAR(1),
 27          INCOME FLOAT )"""
 28 cursor.execute(sql)
 29 
 30 # SQL 插入语句
 31 sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
 32          LAST_NAME, AGE, SEX, INCOME)
 33          VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
 34 '''
 35 # SQL 插入语句第二种方式
 36 sql = "INSERT INTO EMPLOYEE(FIRST_NAME, 
 37        LAST_NAME, AGE, SEX, INCOME) 
 38        VALUES ('%s', '%s', '%d', '%c', '%d' )" % 
 39        ('Mac', 'Mohan', 20, 'M', 2000)
 40 '''
 41 try:
 42    # 执行sql语句
 43    cursor.execute(sql)
 44    # 提交到数据库执行
 45    db.commit()
 46 except:
 47    # 如果发生错误则回滚
 48    db.rollback()
 49 
 50 '''
 51 数据库查询操作
 52 Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
 53 fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
 54 fetchall(): 接收全部的返回结果行.
 55 rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数
 56 '''
 57 # SQL 查询语句
 58 sql = "SELECT * FROM EMPLOYEE 
 59        WHERE INCOME > '%d'" % (1000)
 60 try:
 61    # 执行SQL语句
 62    cursor.execute(sql)
 63    #print(cursor.rowcount)
 64    # 获取所有记录列表
 65    results = cursor.fetchall()
 66    for row in results:
 67       fname = row[0]
 68       lname = row[1]
 69       age = row[2]
 70       sex = row[3]
 71       income = row[4]
 72        # 打印结果
 73       print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % 
 74              (fname, lname, age, sex, income ))
 75 except:
 76    print ("Error: unable to fetch data")
 77 
 78 # 数据库更新操作
 79 # SQL 更新语句
 80 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
 81 try:
 82    # 执行SQL语句
 83    cursor.execute(sql)
 84    # 提交到数据库执行
 85    db.commit()
 86 except:
 87    # 发生错误时回滚
 88    db.rollback()
 89 
 90 # 数据库删除操作
 91 # SQL 删除语句
 92 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
 93 try:
 94    # 执行SQL语句
 95    cursor.execute(sql)
 96    # 提交修改
 97    db.commit()
 98 except:
 99    # 发生错误时回滚
100    db.rollback()
101 
102 # 关闭数据库连接
103 db.close()
104 '''
105 # 使用 execute()  方法执行 SQL 查询
106 #cursor.execute("SELECT VERSION()")
107 
108 # 使用 fetchone() 方法获取单条数据data生成器.
109 data = cursor.fetchone()
110 
111 print("Database version : %s " % data)
112 
113 # 关闭数据库连接
114 db.close()
115 '''

附:

%d 十进制有符号整数
%u 十进制无符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %X 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法

错误处理

DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:

异常描述
Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。
OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。
ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
原文地址:https://www.cnblogs.com/jieran/p/8274872.html