MySQL存图与读图--Python3
一:安装MySQL:sudo apt-get install mysql-serverSudo apt-get installmysql-client如果在安装是遇到一样的问题见文章末尾二、创建自己的数据库假设我们已经安装并配置完成MySQL安装用到的python包:python -m pip install mysql-connector-python使用Python创建mydatabase数据
一、安装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
更多推荐
所有评论(0)