python爬数据后需要存储数据,才能更好的去分析数据。这就需要用到数据库连接了。
现在流行使用的mysql和一些基于内存的高效的key-value形式的非关系型数据库,如redis等。
今天现在讲讲mysql和python的数据库连接交互。
1. 在python中导入模块mysql-connector-python。
可以在自己的控制台或者对应的python解释器中输入以下代码,这里使用的是全局安装
pip install mysql-connector-python
注意:有些安装了Ancona的使用者在点击terminal时会默认打开对应的ancona环境,Ancona和python解释器对包的下载可以查看以下文章:
2.导入模块并创建连接和创建游标
2.1导入模块
import mysql.connector #导入模块
2.2 创建连接
这里有两种方法,都一样 。
方法1:先讲参数用键值对的方式放入字典中,然后将字典用关键字参数(**xxx,属于可变参数的一种,给0或者多个)的方式传参
db_config = {
"host" : "localhost",
"port" : 3306,
"user" : "root",
"password" : "haol",
"db" : "food"
}
connnect = mysql.connector.connect(**db_config)
方法2:直接用键值对方式传参
2.3创建游标对象
#创建游标
cursor = connnect.cursor()
3. 使用方式
3.1创建数据库和表
#创建数据库
sql = "create database food"
cursor.execute(sql)
# 创建表
sql = "create table customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), address VARCHAR(255))"
cursor.execute(sql)
3.2插入数据
插入单条数据,用execute,但是数据要用元组(即 元组名 = (元素1,元素2。。。))保存,若你要传入的数据只有一个,也用元组保存,但形式为 元组名 = (元素1,) 这个末尾逗号一定要存。 对于修改和插入和删除数据,要使用commmit提交事务。
#插入数据
sql = "insert into customers (name,address) values (%s,%s)"
# 单独传递一组数据,数据要是元组
value = ("222","好帅")#数据用元组保存
cursor.execute(sql, value)
connnect.commit() #对于修改和插入数据,要使用commmit提交事务
插入多条数据,使用executemany,但是数据data
参数应该是一个列表(或其他可迭代对象),其中每个元素都是一个元组(tuple)或字典,与 SQL 语句中的占位符或命名占位符相对应。
建议:data外部用列表[],内部用元组(),有几个参数,则元组内部要有几个元素。
#插入数据
sql = "insert into customers (name,address) values (%s,%s)"
#传递多组数据,数据要是可迭代对象
data = [
("wwl 1", "地址 1"),
("wwl 2", "地址 2"),
("wwl 3", "地址 3"),
("wwl 4", "地址 4")
]
cursor.executemany(sql, data) # 使用 executemany 插入多条数据
# 对于修改数据的,要提交到数据库
connnect.commit()
execute对于
SELECT
语句,这个返回值是查询结果集中的行数。对于INSERT
、UPDATE
和DELETE
语句,这个返回值是被修改(插入或删除)的行数。 executemany返回一个整数,表示成功执行的语句数量。
3.3更新数据
#更新数据
sql = "update customers set address = %s where id = %s"
value = ("11","2")
cursor.execute(sql,value)
connnect.commit()
3.4删除数据
#删除数据
sql = "delete from customers where id = %s"
value = ("2",) #元组数据就一个时,逗号不能省略
cursor.execute(sql,value)
connnect.commit()
3.5查询数据
其他一样,但是查询语句不用commit,且执行后返回的整数值只是查询的函数,要获取查询的数据要用fetchall(fetchall()方法返回一个列表,其中每个元素都是一个元组(tuple),代表查询结果集中的一行。)和fetchone。
#查询数据
sql = "select * from customers"
cursor.execute(sql)
print(cursor.fetchall())#拿去数据
# 查询数据方法
def select_data(self, sql, data):
try:
self.cursor.execute(sql, data)
return self.cursor.fetchall()
except Exception as e:
raise e
4.关闭游标和关闭数据
#关闭游标
cursor.close()
#关闭链接
connnect.close()
ok了,剩下点去学点mysql就行了