python操作mysql
来源:互联网 发布:java api在线 编辑:程序博客网 时间:2024/06/05 19:34
1、mysql查询操作:
#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","root","111111","analysis2" )# 使用cursor()方法获取操作游标 cursor = db.cursor()cursor.execute("SET NAMES utf8")#name = "wml' or 1 = '1"name = "wml"sql = "SELECT * FROM test_table WHERE name = %s"#sql_test = "SELECT * FROM test_table WHERE name = '%s'" % (name)try: # 执行SQL语句,这种形式可以防止sql注入,只查询 name = 'wml' 的结果 ''' 在cursor.execute() 的SQL语句中使用“%s”,而不要在SQL内直接添加参数。 如果你使用这项技术,数据库基础库将会自动添加引号,同时在必要的情况下转意你的参数。 相当于预处理操作 ''' cursor.execute(sql, name) #这样写不具有防sql注入功能,同时查询 name = 'wml' 和 其他 的结果 #cursor.execute(sql_test) """ fetchone(): 该方法获取下一个查询结果集。结果集是一个对象 fetchall():接收全部的返回结果行. rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。 """ #输出查询到的行数 print cursor.rowcount #获取下一个记录列表# for i in range(cursor.rowcount):# row = cursor.fetchone()# id = row[0]# name = row[1]# age = row[2]# address = row[3]# job = row[4]# print "id=%d,name=%s,age=%s,address=%s,job=%s" % (id, name, age, address, job ) # 获取所有记录列表 results = cursor.fetchall() for row in results: id = row[0] name = row[1] age = row[2] address = row[3] job = row[4] # 打印结果 print "id=%d,name=%s,age=%s,address=%s,job=%s" % (id, name, age, address, job )except BaseException , error: print error# 关闭数据库连接db.close()
2、mysql插入操作:
#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","root","111111","cheyun_analysis2" )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 插入语句#sql = "INSERT INTO test_table (name, age, address, job) VALUES ('Mac', 12, 'M', 'ie')"#sql = "INSERT INTO test_table (name, age, address, job) VALUES ('%s', %d, '%s', '%s')" % ('aaa', 23, 'M', 'ie')#以预处理方式操作数字类型数据时,插入失败,必须是%s类型操作才行(不知道为什么)sql = "INSERT INTO test_table (name, age, address, job) VALUES (%s, %s, %s, %s)"try: # 执行sql语句,传参固定 #cursor.execute(sql) #cursor.execute(sql) #执行sql语句,并传参 name= 'aaa","12' #这样传参会预处理 cursor.execute(sql, (name, '23', 'M', 'ie')) # 提交到数据库执行 db.commit()except BaseException, asd: # Rollback in case there is any error db.rollback() #输出错误原因 print asd# 关闭数据库连接db.close()
3、数据库更新操作:
#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 更新语句sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭数据库连接db.close()
4、删除操作:
#!/usr/bin/python# -*- coding: UTF-8 -*-import MySQLdb# 打开数据库连接db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )# 使用cursor()方法获取操作游标 cursor = db.cursor()# SQL 删除语句sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit()except: # 发生错误时回滚 db.rollback()# 关闭连接db.close()
5、事务:
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性:一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性:事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性:一个事务的执行不能被其他事务干扰。并发执行的各个事务之间不能互相干扰。
持久性:一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
实例:
# SQL删除记录语句sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit()except: # 发生错误时回滚 db.rollback()
注意:
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。
每一个方法都开始了一个新的事务
6、批量执行sql语句:
#coding=utf-8import MySQLdbconn= MySQLdb.connect( host='localhost', port = 3306, user='root', passwd='123456', db ='test', )cur = conn.cursor()#一次插入多条记录sqli="insert into student values(%s,%s,%s,%s)"cur.executemany(sqli,[ ('3','Tom','1 year 1 class','6'), ('3','Jack','2 year 1 class','7'), ('3','Yaheng','2 year 2 class','7'), ])cur.close()conn.commit()conn.close()
executemany():可以一次插入多条值,执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数。
0 0
- [python]Python操作MySQL
- python操作mysql
- Python操作MySQL
- Python操作Mysql数据库
- python操作MySQL
- python 操作mysql
- python操作mysql
- python操作mysql例子
- python操作mysql
- Python操作Mysql
- Python操作Mysql
- Python操作Mysql
- python操作MySQL数据库
- python操作MySQL数据库
- 用Python操作Mysql
- python操作mysql
- python操作MySQL数据库
- python操作MySQL数据库
- 人数不定的工资类
- Small PDF
- 你的项目有潜在的问题吗?有关项目管理的方式方法
- opencv内存管理器1
- synchronized关键字及实现细节(轻量级锁Lightweight Locking)
- python操作mysql
- 20160615常规赛总结
- Cocos2dx lua 启动流程
- 常用方法
- java Swing 开发的C/S版的一个小工具软件
- AIDL跨进程通讯访问远程服务
- android底层去掉虚拟按键
- JAVA学习之重定向
- 耻辱的时间戳(笑哭)