python链接mysql

1、安装 pip install pymysql

2、连接

import pymysql
​
db = pymysql.connect(host='localhost',
                     user='user',
                     password='passwd',
                     db='db',
                     charset='utf8')
​
try:
    with db.cursor() as cursor:
        # 插入
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))
    # 需要手动提交才会执行
    db.commit()
​
    with db.cursor() as cursor:
        # 读取记录
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    db.close()

补充详解:

'''
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
fetchall(): 接收全部的返回结果行.
rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

执行事务
事务机制可以确保数据一致性。
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关
的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔
离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永
久性的。接下来的其他操作或故障不应该对其有任何影响。
Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。
对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

'''
#!/usr/bin/python3
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost",user='root',\
password="123456",database="mydb",charset='utf8')
'''需要背的1'''# 使⽤ cursor() ⽅法创建⼀个游标对象 cursor  【cursor】 n. 游标, 光标
cursor = db.cursor()
'''需要背的2'''# 使⽤ execute() ⽅法执⾏ SQL 查询       【execute】 vt. 执行, 实行,
cursor.execute("SELECT VERSION()")


cursor.execute("SELECT * FROM stu")
data1 = cursor.fetchall()
print(data1)



'''需要背的3'''# 使⽤ fetchone() ⽅法获取单条数据. Fetch all the rows
# data1 = cursor.fetchone()

'''需要背的4'''# 使⽤ fetchall() ⽅法获取全部数据. Fetch all the rows
data2 = cursor.fetchall()

'''需要背的5'''#使用 %s 占位符来转义更新语句的条件
# print ("Database version : %s " % data1)
print ("Database version :  " , data2)



'''需要背的6'''#rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
row = cursor.rowcount
print(row)

#预处理删除表
sql = """DROP TABLE EMPLOYEE"""
cursor.execute(sql)
try:
# 执⾏sql语句
    cursor.execute(sql)
# 提交到数据库执⾏
    db.commit()
except:
# 如果发⽣错误则回滚
    db.rollback()

# 使⽤预处理语句创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
try:
# 执⾏sql语句
    cursor.execute(sql)
# 提交到数据库执⾏
    db.commit()
except:
# 如果发⽣错误则回滚
    db.rollback()




# SQL 插⼊语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
'''
# 以上例子也可以写成如下形式:
# SQL 插⼊语句
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', %s, '%s', %s)" % \
('Mac', 'Mohan', 20, 'M', 2000)
'''

try:
# 执⾏sql语句
    cursor.execute(sql)
# 提交到数据库执⾏
    db.commit()
    row = cursor.rowcount
    print(row)
except:
# 如果发⽣错误则回滚
    db.rollback()




# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > %s" % (1000)

# 执⾏SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
    fname = row[0]
    lname = row[1]
    age = row[2]
    sex = row[3]
    income = row[4]
# 打印结果
print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
(fname, lname, age, sex, income ))
row = cursor.rowcount
print(row)


#关闭数据库
db.close()

由于每次都需要连接和关闭数据库和游标

所以可以使用with方法来简化代码

import pymysql
db = pymysql.connect(host='localhost',user='root',password='abcd1234',db='test',charset='utf8')
​
name=input('请输入用户名:')
password=input('请输入密码:')



try:
    with db.cursor() as cursor:


        sql = 'select * from user where name="%s" and password="%s"' %(name,password)
        print(sql)
        cursor.execute(sql)
        print(cursor.fetchone())
    db.commit()



finally:
    db.close()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老板来片烤面包

君子博学于文,赠之以礼,谢君~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值