首页技术文章正文

pymysql之python连接MySQL【黑马python培训】

更新时间:2019年07月26日 11时12分09秒 来源:黑马程序员论坛

python连接MySQL之pysql
Python在2.X版本下连接MySQL使用MySQLdb,但是它不支持Python3.X版本。PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

安装pymysql
pip3 install pymysql

连接MySQL数据库
db = pymysql.connect(host='localhost', user='root', password='密码', port=3306)
cursor = db.cursor()

PS:password='密码’中的密码是你的MySQL数据库的真实密码
测试连接是否成功:

# sql语句
sql = 'select version()'
# 运行
try:
    cursor.execute(sql)
    data = cursor.fetchone()
    print('VERSION:', data)
except Exception as e:
    db.collback()
    print(e)
finally:
    db.close()

测试结果:


新建数据库
# 连接
db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306)
cursor = db.cursor()
try:
    sql = 'create DATABASE ziMing DEFAULT CHARACTER SET utf8'
    cursor.execute(sql)
except Exception as e:
    print(e)

在数据库中新建数据表
此时,在链接数据库时要绑定数据库,db=‘ziMing’
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()
sql = 'create table if not exists students(id VARCHAR (255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
try:
    cursor.execute(sql)
except Exception as e:
    print(e)

增加数据1.0
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()
id = '100'
name = 'ziMing'
age = '18'
sql = 'insert into students(id, name, age) VALUES(%s, %s, %s)'
try:
    cursor.execute(sql, (id, name, age))
    print('success')
except Exception as e:
    print(e)
    db.rollback()


增加数据2.0
利用字典实现动态增加数据
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()
data = {
    'id': '101',
    'name': 'Michael',
    'age': 16
}
table = 'students'
keys = ', '.join(data.keys())
print(keys)
values = ', '.join(['%s'] * len(data))
print(values)
sql = 'insert into {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
    cursor.execute(sql, tuple(data.values()))
    db.commit()
    print('Success')
except Exception as e:
    print(e)
    db.rollback()
finally:
    db.close()
查看数据1.0
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()
sql = 'select * from students WHERE age > 1'
try:
    cursor.execute(sql)
    print('count:', cursor.rowcount)
    data = cursor.fetchone()
    print('data:', data)
    datas = cursor.fetchall()
    print('datas:', datas)
    for row in datas:
        print(row)
    print('success')
except Exception as e:
    print(e)
    db.rollback()


查看数据2.0
用while循环查询每一行的数据,fetchall()的内存开销
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
# cursor = db.cursor()
# sql = 'select * from students WHERE age > 1'
# try:
#     cursor.execute(sql)
#     print('count:', cursor.rowcount)
#     data = cursor.fetchone()
#     while data:
#         print(data)
#         data = cursor.fetchone()
# except Exception as e:
#     print(e)
#     db.rollback()

修改数据
用where定位,再用update修改
db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()
sql = 'update students set age = %s WHERE name = %s'
try:
    cursor.execute(sql, (36, 'Janel'))
    db.commit()
    print('Success')
except Exception as e:
    print(e)
    db.rollback()
finally:
    db.close()

插入数据
data = {
    'id': '101',
    'name': 'Michael',
    'age': 16
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))

db = db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()

# ON DUPLICATE KEY UPDATE:如果主键已经存在,就执行更新操作
sql = 'insert into {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '.format(table=table, keys=keys, values=values)
update = ', '.join([" {key} = %s".format(key=key) for key in data])
sql += update
try:
    cursor.execute(sql, tuple(data.values()) * 2)
    db.commit()
    print('Success')
except Exception as e:
    print(e)
    db.rollback()
finally:
    db.close()

删除数据
同样,也是先用where定位数据,再用delete删除数据
db = pymysql.connect(host='localhost', user='root', password='@ROOT_root_123', port=3306, db='ziMing')
cursor = db.cursor()

table = 'students'
condition = 'age > 18'

sql = 'delete from {table} WHERE {condition}'.format(table=table, condition=condition)
try:
    cursor.execute(sql)
    db.commit()
    print('Success')
except Exception as e:
    print(e)
    db.rollback()
finally:
    db.close()

总结
上面是Python使用pymysql连接MySQL数据库并进行简单操作的示例。显然,如此频繁的编写sql语句无法做到高效所以,我将在另一篇博客中介绍如何使用Python + sqlalchemy连接MySQL数据库,并做简单的操作。
---------------------



推荐了解热门学科

java培训 Python人工智能 Web前端培训 PHP培训
区块链培训 影视制作培训 C++培训 产品经理培训
UI设计培训 新媒体培训 产品经理培训 Linux运维
大数据培训 智能机器人软件开发




传智播客是一家致力于培养高素质软件开发人才的科技公司“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。

传智播客从未停止思考

传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”

中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。

何为中高级程序员课程?

传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。




黑马程序员热门视频教程【点击播放】

Python入门教程完整版(懂中文就能学会) 零起点打开Java世界的大门
C++| 匠心之作 从0到1入门学编程 PHP|零基础入门开发者编程核心技术
Web前端入门教程_Web前端html+css+JavaScript 软件测试入门到精通


在线咨询 我要报名
和我们在线交谈!