1 #!/usr/bin/python3 2 import pymysql 3 4 def setup_mysqlDB():# 打开数据库连接 5 print ("setup_mysqlDB()函数开始执行") 6 global db;# 设置db为全局变量 7 try: 8 db = pymysql.connect( 9 host='localhost', 10 port=3306, 11 user='root', 12 passwd='root', 13 db='XC', 14 charset='utf8' 15 ) 16 except Exception as err: 17 print("数据库打开失败:",err) 18 else: 19 print("数据库打开成功") 20 finally: 21 print ("setup_mysqlDB()函数执行完毕") 22 23 def createtable_mysqlDB():# 创建数据表 24 print ("createtable_mysqlDB函数开始执行") 25 try: 26 global cursor; # 设置游标对象 cursor为全局变量 27 # 使用 cursor() 方法关联游标对象 cursor 28 cursor = db.cursor() 29 # 使用 execute() 方法执行 SQL,如果表存在则删除 30 cursor.execute("DROP TABLE IF EXISTS XC_STUDENTS") 31 # 使用预处理语句创建表 32 sql = """CREATE TABLE XC_STUDENTS ( 33 id int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT, 34 syear int(4) NOT NULL, 35 snum int(11) NOT NULL UNIQUE, 36 ssex int(1) NOT NULL, 37 sname varchar(20) NOT NULL, 38 simg varchar(200) NOT NULL 39 )""" 40 #执行语句 41 cursor.execute(sql) 42 except Exception as err: 43 print("数据表创建失败:",err) 44 else: 45 print("数据表创建成功") 46 print ("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 47 finally: 48 print ("createtable_mysqlDB函数执行完毕") 49 50 51 def adddata_mysqlDB1():# 向数据库中插入数据 52 print ("adddata_mysqlDB1函数开始执行") 53 try: 54 # SQL 插入语句 55 sql1 = """INSERT INTO XC_STUDENTS(SYEAR, 56 SNUM, SSEX, SNAME, SIMG) 57 VALUES (2018, 111111111, 1, '小金', 'timg/img/img.jpg')""" 58 # 执行sql语句 59 cursor.execute(sql1) 60 # SQL 插入语句 61 sql2 = """INSERT INTO XC_STUDENTS(SYEAR, 62 SNUM, SSEX, SNAME, SIMG) 63 VALUES (2018, 222222222, 1, '小木', 'timg/img/img.jpg')""" 64 # 执行sql语句 65 cursor.execute(sql2) 66 # 提交到数据库执行 67 db.commit() 68 except Exception as err: 69 print("数据插入失败:",err) 70 # 发生错误数据库回滚 71 db.rollback() 72 else: 73 print("数据插入成功") 74 print ("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 75 finally: 76 print ("adddata_mysqlDB1函数执行完毕") 77 78 def adddata_mysqlDB2():# 向数据库中插入数据 79 print ("adddata_mysqlDB2函数开始执行") 80 try: 81 # SQL 插入语句 82 sql1 = "INSERT INTO XC_STUDENTS(SYEAR,\ 83 SNUM, SSEX, SNAME, SIMG)\ 84 VALUES ('%d', '%d', '%d', '%s', '%s')"%\ 85 (2018, 333333333, 0, '小水', 'timg/img/img.jpg') 86 # 执行sql语句 87 cursor.execute(sql1) 88 # SQL 插入语句 89 sql2 = "INSERT INTO XC_STUDENTS(SYEAR, \ 90 SNUM, SSEX, SNAME, SIMG) \ 91 VALUES('%d', '%d', '%d', '%s', '%s')"% \ 92 (2018, 444444444, 0, '小火', 'timg/img/img.jpg') 93 # 执行sql语句 94 cursor.execute(sql2) 95 # SQL 插入语句 96 sql3 = "INSERT INTO XC_STUDENTS(SYEAR, \ 97 SNUM, SSEX, SNAME, SIMG) \ 98 VALUES('%d', '%d', '%d', '%s', '%s')"% \ 99 (2018, 555555555, 0, '小土', 'timg/img/img.jpg') 100 # 执行sql语句 101 cursor.execute(sql3) 102 # 提交到数据库执行 103 db.commit() 104 except Exception as err: 105 print("数据插入失败:",err) 106 # 发生错误数据库回滚 107 db.rollback() 108 else: 109 print("数据插入成功") 110 print ("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 111 finally: 112 print ("adddata_mysqlDB2函数执行完毕") 113 114 def select_mysqlDB1():# 向数据库查询 115 print ("select_mysqlDB1函数开始执行") 116 try: 117 # SQL 查询语句 118 sql = "SELECT id, syear, snum, ssex, sname, simg FROM XC_STUDENTS \ 119 WHERE SSEX = '%d'" % (0) 120 # 执行sql语句 121 cursor.execute(sql) 122 #fetchone(): 该方法获取下一个查询结果集。结果集是一个对象 123 #fetchall(): 接收全部的返回结果行. 124 #rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。 125 126 127 #如果cur.execute(sql)本身取的时候有多条数据时: 128 # cursor.fetchone():将只取最上面的第一条结果,返回单个元组如('id', 'title'),然后多次使用cursor.fetchone(),依次取得下一条结果,直到为空。 129 # cursor.fetchall(): 将返回所有结果,返回二维元组,如(('id', 'title'), ('id', 'title')), 130 #如果select本身取的时候只有一条数据时: 131 # cursor.fetchone():将只返回一条结果,返回单个元组如('id', 'title')。 132 # cursor.fetchall(): 也将返回所有结果,返回二维元组,如(('id', 'title'), ), 133 result = cursor.fetchone() 134 id = result[0] 135 syear = result[1] 136 snum = result[2] 137 ssex = result[3] 138 sname = result[4] 139 simg = result[5] 140 # 打印结果 141 print("id=%d,syear=%d,snum=%d,ssex=%d,sname=%s,simg=%s" % \ 142 (id, syear, snum, ssex, sname, simg)) 143 144 except Exception as err: 145 print("数据查询失败:",err) 146 # 发生错误数据库回滚 147 db.rollback() 148 else: 149 print("数据数据查询成功") 150 print("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 151 finally: 152 print ("select_mysqlDB1函数执行完毕") 153 154 155 def select_mysqlDB2():# 向数据库中查询 156 print ("select_mysqlDB2函数开始执行") 157 try: 158 # SQL 查询语句 159 sql = "SELECT id, syear, snum, ssex, sname, simg FROM XC_STUDENTS \ 160 WHERE SSEX = '%d'" % (1) 161 # 执行sql语句 162 cursor.execute(sql) 163 #fetchone(): 该方法获取下一个查询结果集。结果集是一个对象 164 #fetchall(): 接收全部的返回结果行. 165 #rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。 166 results = cursor.fetchall() 167 for row in results: 168 id = row[0] 169 syear = row[1] 170 snum = row[2] 171 ssex = row[3] 172 sname = row[4] 173 simg = row[5] 174 # 打印结果 175 print("id=%d,syear=%d,snum=%d,ssex=%d,sname=%s,simg=%s" % \ 176 (id, syear, snum, ssex, sname, simg)) 177 178 except Exception as err: 179 print("数据查询失败:",err) 180 # 发生错误数据库回滚 181 db.rollback() 182 else: 183 print("数据数据查询成功") 184 print("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 185 finally: 186 print ("select_mysqlDB2函数执行完毕") 187 188 def update_mysqlDB():#数据更新 189 print ("update_mysqlDB函数开始执行") 190 try: 191 # SQL 查询语句 192 sql = "UPDATE XC_STUDENTS SET SNUM = SNUM - 111111111 WHERE SSEX = '%d'" % (1) 193 # 执行sql语句 194 cursor.execute(sql) 195 except Exception as err: 196 print("数据更新失败:",err) 197 # 发生错误数据库回滚 198 db.rollback() 199 else: 200 print("数据更新成功") 201 print("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 202 finally: 203 print ("update_mysqlDB函数执行完毕") 204 205 def delete_mysqlDB():# 数据库数据删除操作 206 print ("delete_mysqlDB()函数开始执行") 207 try: 208 # SQL 删除语句 209 sql = "DELETE FROM XC_STUDENTS WHERE SNUM = '%d'" % (0) 210 # 执行SQL语句 211 cursor.execute(sql) 212 # 提交修改 213 db.commit() 214 except Exception as err: 215 print("数据删除失败:",err) 216 # 发生错误时回滚 217 db.rollback() 218 else: 219 print("数据删除成功") 220 print("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 221 finally: 222 print ("delete_mysqlDB()函数执行完毕") 223 224 225 def close_mysqlDB():# 关闭数据库连接 226 print ("close_mysqlDB()函数开始执行") 227 try: 228 db.close() 229 except Exception as err: 230 print("数据库关闭失败:",err) 231 else: 232 print("数据库关闭成功") 233 print ("执行execute()方法后影响的行数为:%d" % (cursor.rowcount)) 234 finally: 235 print ("close_mysqlDB()函数执行完毕") 236 237 if __name__ == '__main__':#程序主进程 238 print ("mian开始执行") 239 try: 240 setup_mysqlDB(); # 打开数据库 241 createtable_mysqlDB(); # 创建数据表 242 adddata_mysqlDB1(); # 向数据库中插入数据 243 adddata_mysqlDB2(); # 向数据库中插入数据 244 select_mysqlDB1(); # 查询数据库数据 245 select_mysqlDB2(); # 查询数据库数据 246 update_mysqlDB(); # 更新数据库数据 247 delete_mysqlDB(); # 数据库数据删除操作 248 close_mysqlDB(); # 关闭数据库 249 except Exception as err: 250 print("程序执行出错:",err) 251 else: 252 print("程序执行成功") 253 finally: 254 print ("main执行完毕") 255 256 #异常 描述 257 #Warning 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。 258 #Error 警告以外所有其他错误类。必须是 StandardError 的子类。 259 #InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。 260 #DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。 261 #DataError 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。 262 #OperationalError 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。 263 #IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。 264 #InternalError 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。 265 #ProgrammingError 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。 266 #NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
pymysql库的使用练习
猜你喜欢
转载自www.cnblogs.com/uasier/p/9258485.html
今日推荐
周排行