MySQL数据库和Python如何结合?

2020-10-13 14:37发布

3条回答
小猪仔
2楼 · 2020-10-14 09:18

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

1、在python中连接数据库

先在terminal中进入mysql,用命令建立FATE库
# MariaDB [(none)]> CREATE DATABASE FATE;
# Query OK, 1 row affected (0.00 sec)

# ##### 再在python中操作,连接该库
# import pymysql
#
# con = pymysql.connect(host='localhost',
#                       user='root',          #用root用户身份
#                       password='westos',    #密码为westos
#                       db='FATE',            #连接FATE库
#                       charset = 'utf8',     #使语言都能正常显示、无乱码
#                       autocommit='True'     #将执行结果提交
# )12345678910111213

2、创建游标对象

游标对象:cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象
# cur = con.cursor() 
1

3、对数据库进行操作

(1)创建表(tables)

# try:
#     create_tables='CREATE TABLE abc (id int,username varchar(20));'  #将想对数据库进行的操作赋值给变量
#     print(cur.execute(create_tables))  #用cur.execute()操作该变量,打印结果,此时打印结果的值为一个数字,意为该操作找了多少条数据库的信息
# except Exception as a:  #若不能成功添加
#     print('创建失败,失败原因:',a)  #打印提示
# else:   #若成功添加
#     print('创建成功')  #打印提示

#### 在python中运行的结果
# #0  #影响了0条数据库的信息
# #创建成功
#### 在数据库中查询到的结果
# # MariaDB [FATE]> SHOW TABLES; #查看表是否成功建立
# # +----------------+
# # | Tables_in_FATE |
# # +----------------+
# # | abc            |
# # +----------------+
# # 1 row in set (0.00 sec)  #显示表成功建立12345678910111213141516171819

(2)插入数据

# try:
#     insert_table="INSERT INTO abc VALUES(3,'user1');"
#     cur.execute(insert_table)
# except Exception as a:
#     print("插入失败,原因为:",a)
# else:
#     #con.commit()       #该行意为将执行的操作提交,与连接数据库时的指令同义,提交前先将程序测试以下,若测试运行成功,再提交比较妥贴.
#     print("插入成功")

#### 在python中运行的结果
# #插入成功

#### 在数据库中查询到的结果
# # MariaDB [FATE]> SELECT * FROM abc;
# # +------+----------+
# # | id   | username |
# # +------+----------+
# # |    3 | user1    |
# # +------+----------+
# # 1 row in set (0.00 sec) #显示插入信息成功1234567891011121314151617181920

(3)插入多条数据

# try:
#     info = [(i,i) for i in range (30,40)]
#     ##第一种方式
#     # insert_A="INSERT INTO abc VALUES(%d,'%s');"
#     # for x in info:
#     #     #print(insert_A %x)          #插入前打印测试是否成功
#     #     cur.execute(insert_A %x)     #测试完成后插入
#     ##第二种方式
#     # insert_B="INSERT INTO abc VALUES('%s','%s');"
#     # cur.executemany(insert_B,info)
# except Exception as a:
#     print("插入多条数据失败,原因为:",a)
# else:
#     print("插入多条数据成功")

#### 在python中运行的结果
# #插入多条数据成功

#### 在数据库中查询到的结果
# # MariaDB [FATE]> SELECT * FROM abc;
# # +------+----------+
# # | id   | username |
# # +------+----------+
# # |    3 | user1    |
# # |   10 | 10       |
# # |   11 | 11       |
# # |   12 | 12       |
# # |   13 | 13       |
# # |   14 | 14       |
# # |   15 | 15       |
# # |   16 | 16       |
# # |   17 | 17       |
# # |   18 | 18       |
# # |   19 | 19       |  #可看到,插入多条数据成功12345678910111213141516171819202122232425262728293031323334

4、数据库的游标指针的操作

# import pymysql
#
# con = pymysql.connect(host='localhost',
#                       user='root',
#                       password='westos',
#                       db='FATE',
#                       charset = 'utf8',
#                       autocommit='True'
# )
# cur = con.cursor()12345678910

(1)数据库的查询

# select="SELECT USERNAME FROM abc;"
#
# print(cur.execute(select))
#
# #31     #该值为数据的条数,默认不返回查询结果集,只返回数据记录数
#
# print(cur.fetchone())
#
# #('user1',)         #返回的结果是下一个查询结果集,以元组的格式返回123456789

(2)游标指针的意义

# select = "SELECT * FROM abc;"
# cur.execute(select)
# print(cur.fetchone())     #查看下一个查询结果集
# #(3, 'user1')
# print(cur.fetchone())     #查看下一个查询结果集(此时游标指针移动了一格,所以查询结果不同了)
# #(10, '10')
# print(cur.fetchmany(3))   #查看当前位置的下N个查询结果集,N可任意
# #((11, '11'), (12, '12'), (13, '13'))
# print(cur.fetchall())     #查看当前位置开始的剩下所有的查询结果集
# #((14, '14'), (15, '15'), (16, '16'), (17, '17'), (18, '18'), (19, ....(以下省略)12345678910

(3)游标指针的移动

relative模式为将指针移动至相对位置,即在当前位置的基础上进行移动,若为数即是向之前的位置移动,若为数即为向之后的位置移动。
absolute模式为将指针移动至绝对位置,即无视指针当前位置,仅看数字代表的位置在何处,并将指针移动至数字代表的位置。
# 可以通过cursor.scroll(position,mode="relative/absolute")
# select = "SELECT * FROM abc;"
# cur.execute(select)
# print(cur.fetchmany(5))
# print('移动指针ing')
# cur.scroll(0,'absolute')  #以absolute的模式,将指针移动到绝对位置(比如0就是开头)
# print(cur.fetchmany(2))
#
# # ((3, 'user1'), (10, '10'), (11, '11'), (12, '12'), (13, '13'))
# # 移动指针ing
# # ((3, 'user1'), (10, '10'))
#
# cur.scroll(2,'absolute') #以absolute的模式,将指针移动到2的位置
# print(cur.fetchmany(2))
#
# #((11, '11'), (12, '12'))
#
# cur.scroll(-4,mode='relative') #以relative的模式,将指针移动到相对位置,相对于原位置的前4个位置
# print(cur.fetchmany(4))
#
# #((3, 'user1'), (10, '10'), (11, '11'), (12, '12'))


天天
3楼 · 2020-10-14 09:30

PyMySQL是用于在Python中运行MySQL的纯Python驱动程序。一旦我们安装了PyMySQL,就可以从Python学习操作MySQL数据库。


相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,'\n'是换行,'\t'是tab,'\\'是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open('3_2.txt','r')linecount=len(file.readlines())linecache.getline('3_2.txt',linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问