首页 > 数据库 >python操作mysql

python操作mysql

时间:2023-03-05 17:06:57浏览次数:38  
标签:name python 数据库 mysql db cursor sql 操作 row


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-8
import MySQLdb

conn= 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语句,但是重复执行参数列表里的参数,返回值为受影响的行数。


标签:name,python,数据库,mysql,db,cursor,sql,操作,row
From: https://blog.51cto.com/sdwml/6101501

相关文章

  • mysql主从数据库状态检测(php)
    实例:<?php/***检测多个主从数据库是否挂掉*建立从数据库$slave_db的二维数组,内容包含每个从服务器的配置数据*/header("Content-Type:text/html;charset=utf-8");set......
  • python beautifulsoup 安装教程
    linux版:pipinstallbeautifulsoup4windows版:下载beautifulsoup安装包下载地址:​​​http://www.cr173.com/soft/109251.html​​​下载解压后,将文件夹放到C:/Pyth......
  • MySQL数据库备份恢复
    拓扑图:推荐步骤:使用MySQLdump对数据库数据库中表一个数据库多个表所有数据库进行备份模拟数据丢失恢复备份的数据 配置MySQL数据库开启二进制日志功能配置二进制日志切割......
  • python装饰器
    装饰器本质上是一个Python函数(其实就是闭包),它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。装饰器用于有以下场景,比如:插......
  • 在线图书借阅网站( Python +Vue 实现)
    功能介绍平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、图书详情页、用户中心......
  • python 循环结构 for循环 输出1到100的数值
    """for循环语法:foriinrange(起点包含,终点不包含):要重复做的事情"""foriinrange(1,101):print(i)......
  • python 循环结构 for循环遍历列表 输出所有列表成员
    """for临时变量in列表:处理临时变量"""li=["刘备","关羽","张飞"]print("准备欢迎每个同学")fornameinli:print(name,"你好")......
  • Python基础
    1.机器语言、汇编语言、编译型、解释型语言子在执行效率、开发效率、跨平台性方面的高低对比。答:执行效率:机器语言>汇编语言>编译型语言>解释性语言;开发效率:机器语言<汇编......
  • python 分支结构 循环结构 while循环 输出3次pyhui
    """定义计数器while条件:需要重复做的事情计数器变化"""#计数器i=0#循环whilei<3:print("pyhui")i+=1#结束print("over")......
  • Python元组类型的内置方法
    一、元组类型内置方法(tuple)元组是不可变的列表,即元组的值不可更改,因此元组一般只用于只存不取的需求。也因此元组可以被列表取代掉,所以元组相比较列表使用的很少。元组相......