10bet网址
连接器和api手册
下载本手册

6.6.1教程:使用缓冲光标提高员工工资

下面的示例脚本为所有2000年加入并仍在公司工作的员工提供了15%的加薪,从明天开始生效。

要遍历选定的员工,我们使用缓冲游标。(缓冲游标在执行查询后获取和缓冲结果集的行;看到第6.9.6.1节,“游标。MySQLCursorBuffered类”)。这样,就不需要在新变量中获取行。相反,游标可以用作迭代器。

请注意

这个脚本就是一个例子;还有其他方法来完成这个简单的任务。

from __future__ import print_function from decimal import from datetime import datetime, date, timecnx = MySQL .connector #连接MySQL服务器connect(user='scott', database='employees') #获取两个缓冲游标curA = cnx.cursor(buffered=True) curB = cnx.cursor(buffered=True) #查询在两个日期定义的时间段内加入的员工Query = ("SELECT s.p emp_no, salary, from_date, to_date FROM employees AS e " "LEFT JOIN salary AS s USING (emp_no) ""WHERE to_date = DATE(' 99999-01-01 ')"AND e.hire_date BETWEEN DATE(%s) AND DATE(%s)") #更新和插入新旧工资的语句update_old_salary = ("UPDATE salary SET to_date = %s" "WHERE emp_no = %s AND from_date = %s") insert_new_salary = ("INSERT INTO salary (emp_no, from_date, to_date, salary) ""VALUES (%s, %s, %s, %s)") #选择获得加薪的员工curA。execute(query, (date(2000,1,1), date(2000,12,31)))) #遍历curA中(emp_no, salary, from_date, to_date)的curA结果:#更新旧的并插入新的工资new_salary = int(round(salary * Decimal('1.15')))execute(update_old_salary, (tomorrow, emp_no, from_date))execute(insert_new_salary, (emp_no, tomorrow, date(9999,1,1,), new_salary)) #提交更改cnx.commit() cnx.close()