pymysql库的使用练习

  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的子类。

猜你喜欢

转载自www.cnblogs.com/uasier/p/9258485.html