×

Python连接MySQL

小飞侠 小飞侠 发表于2020-11-22 15:06:58 浏览905 评论0

抢沙发发表评论

连接数据库

创建表

# _*_coding:utf-8_*_
# 作者    :渝周郎
# 创建时间:2019/6/1821:00
# 文件    :01连接数据库.py
# IDE     :PyCharm

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 创建表

sql = """
create table pymysql_users(
id INT auto_increment primary key ,
name char(25) NOT NULL UNIQUE,
age tinyint,
sex char(10) not null
)engine=innodb default charset=utf8;

"""
cursor.execute(sql)
cursor.close()
conn.close()

字典返回的游标

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

注意: charset="utf8",千万不要写成"utf-8"

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 增
sql = "insert into pymysql_users(name, age, sex) values (%s, %s, %s);"
name = "小王"
age = 19
sex = "男"
ret = cursor.execute(sql, [name, age, sex])
conn.commit()
print(ret)
cursor.close()
conn.close()

插入数据失败回滚

在执行增删改操作时,如果不想提交前面的操作,可以使用 rollback() 回滚取消操作。

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 增
sql = "insert into pymysql_users(name, age, sex) values (%s, %s, %s);"
name = "小王"
age = 19
sex = "男"
try:
   # 执行SQL语句
   cursor.execute(sql, [name, age, sex])
   # 提交事务
   conn.commit()
except Exception as e:
   print(e)
   # 有异常,回滚事务
   conn.rollback()
cursor.close()
conn.close()

获取插入数据的ID(cursor.lastrowid)

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 增
sql = "insert into pymysql_users(name, age, sex) values (%s, %s, %s);"
name = "小王"
age = 19
sex = "男"
try:
   # 执行SQL语句
   cursor.execute(sql, [name, age, sex])
   # 提交事务
   conn.commit()
   # 提交之后,获取刚插入的数据的ID
   last_id = cursor.lastrowid
   print(last_id)
except Exception as e:
   print(e)
   # 有异常,回滚事务
   conn.rollback()
cursor.close()
conn.close()

批量执行(executemany)

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 增
sql = "insert into pymysql_users(name, age, sex) values (%s, %s, %s);"
# 批量数据
data = [("小周", 23, "女"), ("小赵", 34, "女"), ("老钱", 65, "男")]
try:
   # 执行SQL语句
   cursor.executemany(sql, data)
   # 提交事务
   conn.commit()
except Exception as e:
   print(e)
   # 有异常,回滚事务
   conn.rollback()
cursor.close()
conn.close()

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 删
sql = "delete from pymysql_users where id=%s;"

try:
   # execute第二参数只能是元组、列表、字典
   cursor.execute(sql, [3])
   conn.commit()
except Exception as e:
   conn.rollback()

cursor.close()
conn.close()

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()

# 改
sql = "update pymysql_users set age=%s where name=%s;"
try:
   cursor.execute(sql, [25, "小周"])
   conn.commit()
except Exception as e:
   conn.rollback()

cursor.close()
conn.close()

import pymysql

conn = pymysql.connect(
   host="127.0.0.1",
   user="数据库用户名",
   password="数据库密码",
   database="数据库名称",
   charset="utf8"
)

cursor = conn.cursor()
# 单条数据查询
sql1 = "select * from pymysql_users where name=%s;"
# 执行SQL语句
cursor.execute(sql1, ("小周",))
# 获取单条查询数据
ret = cursor.fetchone()

print(ret)
# 多条数据查询
sql2 = "select * from pymysql_users"
cursor.execute(sql2)
ret2 = cursor.fetchall()
print(ret2)

# 指定条数查询
cursor.execute(sql2)
ret3 = cursor.fetchmany(2)
print(ret3)

# 最后关闭游标和连接
cursor.close()
conn.close()

游标移动

# 光标按绝对位置移动1
cursor.scroll(1, mode="absolute")
# 光标按照相对位置(当前位置)移动1
cursor.scroll(1, mode="relative")



欢迎评论

访客