python mysql 简书_python操作mysql

python 操作 mysql

import pymysql

#1、基本语法

#(1)创建链接 host、user、paaword、database这四个参数必须写

conn = pymysql.connect(host = '127.0.0.1',user = 'root',password = '123456',database = 'db1',charset = 'utf8',port = 3306)

#(2)创建游标对象,该对象可以进行增删改查操作

cursor = conn.cursor()

(3)执行sql语句

sql = 'select * from t1'

res = cursor.execute(sql)

print(res) # 返回是数据条数

(4)获取数据

res = cursor.fetchone()

print(res)

(5)释放游标对象

cursor.close()

(6)关闭链接

conn.close()

创建/删除表

conn = pymsql.connect(host = '127.0.0.1',user = 'root',password = '123456',database = 'db1')

cursor = conn.cursor()

#(1)创建一张表

sql = 'create table t1(id int,name varchar(255))'

res = cursor.execute(sql)

print(res)

#(2)查看表结构

sql = ‘desc t1’

res = cursor.execute(sql)

print(res) # 返回的是字段数

print(cursor.fetchone()) # 只获取第一条数据

#(3)删除表

try:

sql = 'drop table t1'

res = cursor.execute(sql)

print(res)

except:

pass

cursor.close()

conn.close()

事务处理

python操作事务处理必须通过commit提交数据才会真正的更新数据,否则rollback回滚,恢复到以前状态

conn = pymysql.connect(host = "127.0.0.1",user = "root",password = "123456",database = "db1")

cursor = conn.cursor()

sql1 = "begin"

sql2 = "select * from t1"

res1 = cursor.execute(sql1)

res2 = cursor.execute(sql2)

print(res1,res2)

print(cursor.fetchone())

sql3 = "update t1 set name = 'egon' where id = 1"

res3 = cursor.execute(sql3)

sql4 = "commit"

res4 = cursor.execute(sql4)

print(res1,res2,res3,res4) # 0 有数据 0 0 只有查询数据的时候有返回值代表数据条数,通过获取数据得到默认是元组形式

sql注入问题

import pymysql

conn = pymysql.connect(host = "127.0.0.1",user = "root",password = "123456",database = "db1",charset = "utf8")

cursor = conn.cursor()

username = input("用户名:").strip()

password = input("密码:").strip()

sql = "select * from user where name = %s and pwd = %s"

rows = cursor.execute(sql,(username,password))

if rows:

print("登陆成功")

else:

print("登陆失败")

conn.commit()

cursor.close()

conn.close()

(1)发现问题:输入:egon' or 1 =1 -- '123' 可以直接登陆,不管用户名、密码正确与否

其中 or 1=1 代表真

-- 代表后面的代码注释

(2)解决问题

使用预处理机制,可以避免绝大多数的sql注入问题

execute参数是一个sql语句,如果sql语句和里面的参数值分开执行,默认开启预处理

execute(sql,(参数1,参数2,参数3))

python 操作mysql增删改查

import pymysql

#1、创建mysql链接

conn = pymysql.connect(host = "127.0.0.1",user = "root",password = "123456",database = "db1")

#查询数据默认是元组,可以设置返回字典类型,pymysql.cursors.DictCursor

cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) #通过获取数据来显示字典类型,例cursor.fetchone()

#增

sql1 = "insert t1(first_name,last_name,age,sex,money) values(%s,%s,%s,%s,%s)"

res = cursor.execute(sql,("王","振",80,0,12000))

...

python操作mysql时候,默认开启事务,必须在增删改之后提交数据,才会对数据产生影响,否则默认回滚

提交数据:conn.commit()

回滚数据:conn.rollback()

execute 指定单条数据

executemany 执行多条数据

...

#一次插入多条数据

res = cursor.executemany(sql,[("李","平",16,0,12333),("王","菊",18,0,9000)])

print(res)

#获取最后插入这条数据的id号(针对于单条数据执行,获取最后的id,如果多条数据的执行,以第一条数据的id为主)

print(cursor.lastrowid)

#针对于多条数据最后的id,可以通过倒序查询,找到id号

select id from t1 order by ud desc limit1

#删

sql = "delete from t1 where id = %s"

res = cursor.execute(sql,(8,))

if res:

print("successful")

else:

print("fail")

#改

sql = "update t1 set first_name = %s where id = %s"

res = cursor.execute(sql,("王",10))

print(res)

if res:

print("successful")

else:

print("fail")

#查

sql = "select * from t1"

res = cursor.execute(sql)

print(res) # 字段的总条数

#(1)获取一条数据 fetchone

res = cursor.fetchone()

print(res)

#(2)获取多条数据 fetchmany默认从上一条数据继续向下搜索(性质类似于迭代器)

data = cursor.fetchmany() # 没有参数,默认只获取一条

date = cursor.fetchmany(3) # 获取3条

print(data)

#(3)获取所有数据fetchall基于上一条数据往下搜索(性质类似于迭代器)

data = cursor.fetchall()

print(data)

for row in data:

first_name = row["first_name"]

last_name = row["last_name"]

age = row["age"]

if row["sex"] == "0":

sex = "女性`"

else:

sex = "男性"

money = row["money"]

print("姓:{},名:{},年龄:{},性别:{},收入:{}".format(first_name,last_name,age,sex,money))

#在进行增删改的时候,必须通过commit提交数据,才会对数据库进行更新,否则默认回滚

conn.commit()

cursor.close(0

conn.close()

自定义搜索查询的位置

1、相对滚动

cursor.scroll(3,mode = "relative") # 向后滚动了

res = cursor.fetchone()

print(res)

cursor.scroll(-3,mode = "relative") # 向前滚动了

无论前后,不能超出范围

2、绝对滚动(永远基于第一条数据的位置滚动)

cursor.scroll(0,mode = "absolute") # 第一条数据是相对于0的位置滚动

res = cursor.fetchone()

print(res)

cursor.scroll(1,mode = "absolute") # 绝对查找,只根据第一条数据中相对于0的位置滚动

cursor.scroll(2,mode = "absolute") # 绝对查找,只根据第一条数据中相对于0的位置滚动

导入导出数据库

导出数据库

第一步:先退出数据库

第二步:切换到对应的导出路径

第三步:导出所有 mysqldump -uroot -p123456 数据库名>数据库名.sql

** 导出单个** mysqldump -uroot -p123456 db1 t1>t1.sql

导入数据库

第一步:先创建一个空的数据库

第二步:找到对应的sql文件的路径

第三步:source 路径/sql 文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值