MySQL数据库和Python怎么结合?

2020-10-13 09:44发布

2条回答
浅浅77
2楼 · 2020-10-13 09:48

什么是PyMySQL
您可能已经知道要使用任何数据库,我们需要数据库驱动程序。PyMySQL是用于在Python中运行MySQL的纯Python驱动程序。
现在,请记住,默认情况下此PyMySQL不可用。因此,首先,我们将学习如何下载和安装此驱动程序。

安装PyMySQL
在这里,我假设您的计算机上已经安装了python。而且,您已经完成了设置环境变量的工作。如果没有,那么您应该先转到此链接。

要安装PyMySQL,请运行以下命令(对于Linux的MAC使用终端,我正在使用Windows,因此我正在使用cmd)。
pip install pymysql

确保您已连接互联网,并且在运行上述命令时会看到以下输出。
python mysql教程

现在,一旦我们安装了PyMySQL,就可以从Python学习操作MySQL数据库。在此Python MySQL教程中,我将向您介绍使用Python在MySQL数据库中进行的基本CRUD操作。

注意:CRUD表示数据库中的创建,读取,更新和删除操作。

在MySQL中创建数据库
在开始任何操作之前,我们需要一个数据库,对吗?因此,打开您的MySQL数据库,对于MySQL,我在这里使用XAMPP,并且可以使用localhost / phpmyadmin访问它。
尽管您也可以使用任何其他软件,但过程将相同。

转到localhost / phpmyadmin 并创建一个数据库。我创建了一个名为belal的数据库,如下图所示。
mysql数据库

现在,在数据库内部,我们将创建表。因此,转到SQL并运行以下SQL查询来创建表。
CREATE TABLE todos(
id INTEGER PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
desc VARCHAR(500),
date DATE
)

上面的查询将创建下表。
在这里插入图片描述
Python MySQL教程:执行基本CRUD
在这里,我正在使用PyCharm IDE。(我爱上了JetBrains IDEs????)。

现在,让我们从PyCharm中的新Python项目开始。

创建操作
在您的项目中创建一个名为CreatTask.py的新Python文件。第一步是导入pymysql。
import pymysql

然后我们将连接到数据库。
connection = pymysql.connect(
host=‘localhost’,
user=‘root’,
password=‘password’,
db=‘belal’,
)

现在,我们将获得用户输入,因为我们需要在表中存储标题,描述和日期。因此,我们将从用户那里获得这些值。
title = input("Enter title of your task: ")
desc = input("Add some description to it: ")
date = input("Enter the date for this task (YYYY-MM-DD): ")

因此,我们具有值以及与MySQL数据库的连接。要插入值,我们这样做。
try:
with connection.cursor() as cursor:
sql = “INSERT INTO todos (
titledescdate) VALUES (%s, %s, %s)”
try:
cursor.execute(sql, (title, desc, date))
print(“Task added successfully”)
except:
print(“Oops! Something wrong”)

connection.commit()1

finally:
connection.close()

我们拥有AddTask.py的最终代码是。
import pymysql

connection = pymysql.connect(
host=‘localhost’,
user=‘root’,
password=‘password’,
db=‘belal’,
)

title = input("Enter title of your task: ")
desc = input("Add some description to it: ")
date = input("Enter the date for this task (YYYY-MM-DD): ")

try:
with connection.cursor() as cursor:
sql = “INSERT INTO todos (
titledescdate) VALUES (%s, %s, %s)”
try:
cursor.execute(sql, (title, desc, date))
print(“Task added successfully”)
except:
print(“Oops! Something wrong”)

connection.commit()1

finally:
connection.close()

您可以尝试执行此代码。
python mysql教程Python MySQL教程

如果获得如上所示的输出,则应该在MySQL数据库中看到这些值。
mysql表值

读取操作
再次创建一个名为ReadTasks.py的新Python文件,并在其中编写以下代码。
import pymysql

connection = pymysql.connect(
host=‘localhost’,
user=‘root’,
password=‘password’,
db=‘belal’,
)

try:
with connection.cursor() as cursor:
sql = “SELECT 
idtitledesc FROM todos WHERE date = CURDATE()”
try:
cursor.execute(sql)
result = cursor.fetchall()

        print("Id\t\t Title\t\t\t\t\tDescription")
       print("---------------------------------------------------------------------------")
       for row in result:
           print(str(row[0]) + "\t\t" + row[1] + "\t\t\t" + row[2])

   except:
       print("Oops! Something wrong")

connection.commit()123456789

finally:
connection.close()

运行上述代码后,您将看到以下输出。
python mysql教程

更新操作
我现在希望;您可以自己执行所有操作。但是,如果您有任何困惑,这里是用于更新MySQL数据库中的值的代码段。

try:
with connection.cursor() as cursor:
sql = “UPDATE todos SET 
title=%s, desc=%s WHERE id = %s”
try:
cursor.execute(sql, (‘your new title’, ‘your new description’, 1))
print(“Successfully Updated…”)
except:
print(“Oops! Something wrong”)

connection.commit()1

finally:
connection.close()

删除操作
最后,您可以将记录删除为。

try:
with connection.cursor() as cursor:
sql = “DELETE FROM todos WHERE id = %s”
try:
cursor.execute(sql, (1,))
print(“Successfully Deleted…”)
except:
print(“Oops! Something wrong”)

connection.commit()1

finally:
connection.close()
我们已经完成了MySQL中的所有CRUD操作。

Anonyem
3楼 · 2020-10-15 13:59





这次给大家带来的是将python爬取的数据写入数据库将爬取得数据写入数据库的步骤:

连接数据库;创建表将数据写入数据库;关闭数据库。

  1. 连接数据库在连接自己的数据库之前我们应先导入importMySQLdb模块

  2. host:自己的主机号,一般写127.0.0.1就可以了port:端口号user:rootpasswd:密码db:连接的数据库名称charset:编码

  3. importMySQLdb

  4. conn=MySQLdb.Connect(host='127.0.0.1',

  5. port=3306,

  6. user='root',

  7. passwd='*******',

  8. db='******',

  9. charset='utf8')

2.创建表

cursor():使用该链接创建并返回的游标execute():执行一个数据库查询和命令commit():提交但前事物(写入数据时也会用到)

cur=conn.cursor()

sql="""CREATETABLExiaoshuo(

titleCHAR(20),

sec_titleCHAR(20),

contentVARCHAR(6499))"""

cur.execute(sql)

conn.commit()


3.写入数据库这里有两种方法写入:第一种:

into="INSERTINTOscrapy_yilong2(title,author,comment,`time`)VALUES(%s,%s,%s,%s)"

values=(item['title'],item['author'],item['comment'],item['time'])

cur.execute(into,values)

conn.commit()


第二种:

cur.execute("INSERTINTOscrapy_yilong2(title,author,comment,`time`)VALUES(%s,%s,%s,%s);%(item['title'],item['author'],item['comment'],item['time']))

conn.commit()


但是建议大家使用第一种,第一种比较规范还有就是,传入数据后记得提交,也就是commit()函数要记得写

4.关闭数据库

conn.close()



在这里,给大家一个完整的实例,以供大家体会,下面这个例子是爬取多本小说,并写入数据库如果大家想更加的了解这个代码,可以查看我的上一篇博客上一篇:爬取多本小说并写入多个txt文档

#-*-coding:utf-8-*-

frombs4importBeautifulSoup

importrequests

importre

importMySQLdb

#解决出现的写入错误

importsys

reload(sys)

sys.setdefaultencoding('utf-8')


#可以获取多本文章

MAX_RETRIES=20

url='http://eutils.ncbi.nlm.nih.gov/entrez/eutils/einfo.fcgi'

session=requests.Session()

adapter=requests.adapters.HTTPAdapter(max_retries=MAX_RETRIES)

session.mount('https://',adapter)

session.mount('http://',adapter)

r=session.get(url)


print('连接到mysql服务器...')

conn=MySQLdb.connect(host='127.0.0.1',user='root',passwd='123mysql',db='onefive',charset='utf8')

print('连接上了!')

cur=conn.cursor()

#判断表是否存在,若存在则删除此表

cur.execute("DROPTABLEIFEXISTSAGENT")

#创建表

sql="""CREATETABLExiaoshuo(

titleCHAR(20),

sec_titleCHAR(20),

contentVARCHAR(6499))"""

cur.execute(sql)

conn.commit()


#爬取首页各小说链接,并写入列表

url1='http://www.biquge.com.tw/'

html=requests.get(url1).content

soup=BeautifulSoup(html,'html.parser')

article=soup.find(id="main")

texts=[]

fornovelinarticle.find_all(href=re.compile('http://www.biquge.com.tw/')):

#小说链接

nt=novel.get('href')

texts.append(nt)

#printnt#可供检验

new_text=[]

fortextintexts:

iftextnotinnew_text:

new_text.append(text)

#将刚刚的列表写入一个新列表,以供遍历,获取各个链接

h=[]

h.append(new_text)

l=0

forninh:

whilel<=len(n)-1:

#爬取小说的相关信息及目录和目录链接

url2=n[l]

html=requests.get(url2).content

soup=BeautifulSoup(html,'html.parser')

a=[]

#爬取相关信息及目录

forcatalogueinsoup.find_all(id="list"):

timu=soup.find(id="maininfo")

name1=timu.find('h1').get_text()

tm=timu.get_text()

e_cat=catalogue.get_text('')

printname1

#printtm

#printe_cat

end1=u'%s%s%s%s'%(tm,'',e_cat,'')

cur.execute("INSERTINTOxiaoshuo(title)VALUES('%s');"%(name1))

conn.commit()

#爬取各章链接

forlinkincatalogue.find_all(href=re.compile(".html")):

lianjie='http://www.biquge.com.tw/'+link.get('href')

a.append(lianjie)

#将各章的链接列表写入一个新列表,以供遍历,获取各章的列表

k=[]

k.append(a)

j=0

foriink:

whilej<=len(i)-1:

#爬取各章小说内容

url='http://www.biquge.com.tw/14_14055/9194140.html'

finallyurl=i[j]

html=requests.get(finallyurl).content

soup=BeautifulSoup(html,'html.parser')

tit=soup.find('div',attrs={'class':'bookname'})

title=tit.h1

content=soup.find(id='content').get_text()

section=title.get_text()

printsection

printcontent

j+=1

#end2=u'%s%s%s%s'%(title,'',content,'')

cur.execute("INSERTINTOxiaoshuo(sec_title,content)VALUES('%s','%s');"%(section,content))

conn.commit()


l+=1

conn.close()



相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但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(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

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

  • 回答 26

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

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