文档章节

python操作Mysql数据库示例

o
 osc_y8yehimr
发布于 2019/03/20 16:54
字数 1051
阅读 7
收藏 0

钉钉、微博极速扩容黑科技,点击观看阿里云弹性计算年度发布会!>>>

python库:pymysql

安装:install pymysql、mysql数据库

一、连接数据库、创建speder库、查询版本、

import pymysql
##链接数据库
db = pymysql.connect(host='localhost',user='root', password='123456', port=3306)
##用 cursor() 方法获得 MySQL 的操作游标,利用游标来执行 SQL 语句
cursor = db.cursor()
##查询数据库版本语句
cursor.execute('SELECT VERSION()')
##调用fetchone() 方法来获得第一条数据,也就得到了版本号
data = cursor.fetchone()
print('Database version:', data)
##执行了创建数据库的操作,数据库名称叫做 spiders,默认编码为 utf-8
#cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
db.close()

二、创建表

import pymysql
##创建表
'''
字段名    含义    类型
id    学号    varchar
name    姓名    varchar
age    年龄    int
'''

db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
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))'
cursor.execute(sql)
db.close()

三、插入数据

#简单插入数据
import pymysql
id = '20120001'
user = 'Bob'
age = 20
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='spiders')
cursor = db.cursor()
sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)'

#升级1.0插入数据,启用防错
try:
    cursor.execute(sql, (id, user, age))
    '''
    执行 db 对象的 commit() 方法才可实现数据插入,
    这个方法才是真正将语句提交到数据库执行的方法,
    对于数据插入、更新、删除操作都需要调用该方法才能生效
    '''
    db.commit()
except:
    #如果出错了就把所有数据回滚(即撤消),就像没操作之前一样
    db.rollback()
db.close()

3.1、【插入数据2.0升级版,用字典插入数据,不用修改sql语句,只要修改字典即可】

data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 20
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
try:
   if cursor.execute(sql, tuple(data.values())):
       print('Successful')
       db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

 四、更新数据

#最简单的方式就是构造一个 SQL 语句然后执行
sql = 'UPDATE students SET age = %s WHERE name = %s'
try:
   cursor.execute(sql, (25, 'Bob'))
   db.commit()
except:
   db.rollback()
db.close()


#【升级版更新数据用字典传入,不需改sql语句】
data = {
    'id': '20120001',
    'name': 'Bob',
    'age': 21
}

table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))

#实际用的是插入语句,不过加了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:
    if cursor.execute(sql, tuple(data.values())*2):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()   

'''
在这里完整的 SQL 构造出来是这样的:
INSERT INTO students(id, name, age) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE id = %s, name = %s, age = %s
相比上面介绍的插入操作的 SQL,后面多了一部分内容,那就是更新的字段,ON DUPLICATE KEY UPDATE 使得主键已存在的数据进行更新,
后面跟的是更新的字段内容。所以这里就变成了 6 个 %s。所以在后面的 execute() 方法的第二个参数元组就需要乘以 2 变成原来的 2 倍。 如此一来,我们就可以实现主键不存在便插入数据,存在则更新数据的功能了 '''

五、删除数据

#删除
table = 'students'
condition = 'age > 20'

sql = 'DELETE FROM  {table} WHERE {condition}'.format(table=table, condition=condition)
try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()

db.close()
'''
这里我们指定了表的名称,删除条件。因为删除条件可能会有多种多样,运算符比如有大于、小于、等于、LIKE等等,
条件连接符比如有 AND、OR 等等,所以不再继续构造复杂的判断条件,在这里直接将条件当作字符串来传递,以实现删除操作
'''

六、查询数据

#【查询数据,升级操作,防止内存开销过大】
sql = 'SELECT * FROM students WHERE age >= 20'
try:
    cursor.execute(sql)
    print('Count:', cursor.rowcount)
    row = cursor.fetchone()
    while row:
        print('Row:', row)
        row = cursor.fetchone()
except:
    print('Error')

'''
不用fetchall,而用fetchone这样每循环一次,
指针就会偏移一条数据,随用随取,简单高效
'''


#查询数据,简单操作会比较费内存
sql = 'SELECT * FROM students WHERE age >= 20'
try:
    cursor.execute(sql)
    print('Count:', cursor.rowcount)
    one = cursor.fetchone()
    print('One:', one)
    results = cursor.fetchall()
    print('Results:', results)
    print('Results Type:', type(results))
    for row in results:
        print(row)
except:
    print('Error')
'''
运行结果:
Count: 4
One: ('20120001', 'Bob', 25)
Results: (('20120011', 'Mary', 21), ('20120012', 'Mike', 20), ('20120013', 'James', 22))
Results Type: <class 'tuple'>
('20120011', 'Mary', 21)
('20120012', 'Mike', 20)
('20120013', 'James', 22)
'''

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
python MySQLdb安装和使用

MySQLdb是Python连接MySQL的模块,下面介绍一下源码方式安装MySQLdb: 首先要下载下载:请到官方网站http://sourceforge.net/projects/mysql-python/或者点击链接下载http://downloads.sour...

我的去哈哈
2014/03/28
3W
2
python连接MySQL/redis/mongoDB数据库的简单整理

python连接mysql 用python操作mysql,你必须知道pymysql 代码示意: mysql的连接信息也可以放到一个字典里,connect()传参时传入字段。 自此mysql已经连上,接下来我们就开始简单操作数据库...

osc_g75abnjv
2018/08/10
3
0
小白学 Python 爬虫(31):自己构建一个简单的代理池

人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Linux基础入门 小白学...

osc_h777op1v
04/16
16
0
Python语言访问MySQL数据库

4.使用python语言访问MySQL 1)pymysql库:Python语言访问MySQL接口 -安装:   在线:pip install pymysql    离线:     第一步:下载安装包,下载地址:       https://pyp...

osc_38hqdg11
2019/01/07
2
0
Python使用DB-API操作MySQL数据库

Python提供了一个标准数据库API,称为DB-API,用于处理基于SQL的数据库。 与任何底层数据库的交互都可以使用DB-API,因为DB-API在代码与驱动程序之间提供了一个抽象层,可以根据需要替换底层...

osc_fdjrfnux
2019/07/07
1
0

没有更多内容

加载失败,请刷新页面

加载更多

如何通过日期属性对数组进行排序 - How to sort an array by a date property

问题: Say I have an array of a few objects: 说我有一些对象的数组: var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}]; How can I sort......

javail
33分钟前
22
0
技术教程| 百度鹰眼历史轨迹查询:轨迹抽稀功能

本文作者:用****9 本篇教程中,我们将详细地说明鹰眼历史轨迹查询(gettrack接口)中,如何通过vacuate_grade选项对轨迹进行抽稀,以及不同的抽稀力度对轨迹产生的影响。 上一篇教程中,我们...

百度开发者中心
前天
17
0
整数的最大值和最小值 - Maximum and Minimum values for ints

问题: I am looking for minimum and maximum values for integers in python. 我在python中寻找整数的最小值和最大值。 For eg., in Java, we have Integer.MIN_VALUE and Integer.MAX_VA......

法国红酒甜
今天
22
0
Quartz的Misfire处理规则 错过任务执行时间的处理机制

调度(scheduleJob)或恢复调度(resumeTrigger,resumeJob)后不同的misfire对应的处理规则 CronTrigger withMisfireHandlingInstructionDoNothing ——不触发立即执行 ——等待下次Cron触发频率...

独钓渔
今天
4
0
PHP解析/语法错误; 以及如何解决它们? - PHP parse/syntax errors; and how to solve them?

问题: Everyone runs into syntax errors. 每个人都遇到语法错误。 Even experienced programmers make typos. 即使是经验丰富的程序员也会打错字。 For newcomers, it's just part of the......

fyin1314
今天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部