一、安装MySQL

sudo apt-get install mysql-server

Sudo apt-get install  mysql-client

如果在安装是遇到一样的问题见文章末尾

二、创建自己的数据库

假设我们已经安装并配置完成MySQL

安装用到的python包:

python -m pip install mysql-connector-python

使用Python创建mydatabase数据库:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="xxxxx"
)

mycursor = mydb.cursor()
print(mydb)

# 创建一个数据库
mycursor.execute("CREATE DATABASE mydatabase")

假设已经安装了MySql,并且使用show databases;查询确定存在mydatabase

首先登录:mysql

mysql -u root -p 并输入密码

查看刚刚创建的数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| data1              |
| mydatabase         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

 

三、Python存入图片到MySQL

目标:将1.jpg存入mydatabase数据库的Images表中

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="xxxxx",
  database="mydatabase"   #访问指定的数据库,如果不存在则报错
)

mycursor = mydb.cursor()

#创建一张名为Images的表,包含name和data两个属性,name用来存放图片名,data用来存图片数据
mycursor.execute("CREATE TABLE Images (name VARCHAR(255), data LongBLOB)")

#以二进制打开一张图
im = open("1.jpg",'rb')
img = im.read()
im.close()

#书写存图的SQL语句:
sql = "INSERT INTO Images (name, data) VALUES (%s, %s)"
val = ("1", img)
mycursor.execute(sql, val)
# 提交命令
mydb.commit()       #提交更改命令否则表不会更改
#如果存放成功会提示 1 record inserted.
print(mycursor.rowcount, "record inserted.")

使用MySQL查看刚刚存放的图片

mysql> use mydatabase;
Database changed
mysql> show Tables;
+----------------------+
| Tables_in_mydatabase |
+----------------------+
| Images               |
| demo_pic             |
+----------------------+
2 rows in set (0.00 sec)
mysql> select name from Images limit 1;
+-------+
| name  |
+-------+
| 1.jpg |
+-------+
1 row in set (0.00 sec)

(注:使用select语句查看的时候不用选择data,因为存入的图片数据是二进制,人看不懂)

 

四、使用Python读取刚刚存放的图片

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="xxxxxx",
  database="mydatabase"   #访问指定的数据库,如果不存在则报错
)

mycursor = mydb.cursor()
#书写SOL语句
# 方式一:只要图片数据,不要图片名,保存是自定义图片名
mycursor.execute("SELECT data FROM Images LIMIT 1")
fout = open('fetch_1.jpg', 'wb')
# print(type(mycursor.fetchone()))  #<class 'tuple'> ,这一句和下一句不能同时打开会报错
img_data = mycursor.fetchone()[0] #之所以加[0]是因为fentch回来的数据存放在列表中
print(img_data)
fout.write(img_data)
fout.close()


# 方式二:同时获取图片名和图片数据,以数据库中的名称命名,区别只在于书写的SQL语句不同
# img = mycursor.fetchone()
# img_name = img[0]
# img_data = img[1]
# print(img_name)   # 1.jpg
# print(img_data)   # b'\xff\xd8\xff\xe0\x00\x10J............
# fout = open(img_name, 'wb')
# fout.write(img_data)
# fout.close()

 

个人遇到的问题:

1、Mysql访问需要加sudo的问题:

https://blog.csdn.net/NepalTrip/article/details/82116607

https://www.cnblogs.com/john-xiong/p/13092994.html

2、Mysql设置密码:http://c.biancheng.net/view/7616.html

    设置密码等级:https://blog.csdn.net/gxd520/article/details/98942904

3、《MySQL必知必会》创建数据源:https://blog.csdn.net/hukangqiang/article/details/79319525

4、MySQL参考资料:

https://www.w3schools.com/python/python_mysql_insert.asp

https://dev.mysql.com/doc/connector-python/en/connector-python-example-connecting.html

https://downloads.mysql.com/docs/connector-python-en.pdf

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐