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 ‘‘‘
错误处理
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的子类。 |