风尘岁月 发表于 2021-1-2 14:24:23

我想将图片的二进制数据 写入mysql数据库 请问哪位大佬能帮忙

现有图片爬虫一只 能够采集大量的数据
{:10_256:}
这是爬虫文件的github仓库:https://github.com/Hope-wind/python/blob/master/%E5%9B%BE%E7%89%87/%E6%AC%A1%E5%85%83/scrapy.py

但是硬盘一直在咆哮 让我别老放她身上
{:10_244:}


问题:我想把图片的二进制数据放到mysql数据库
请问哪位大佬能够帮忙?{:10_254:}

孤独的嫖客 发表于 2021-1-2 14:49:57

图片并不适合用来存放进数据库,
通常情况下,数据库保存的是图片存放的路径,
假设以上你已经知晓,但还是期望图片内容本身存放入数据库,

代码中55行,你已经得到图片的二进制数据了


简单些来讲,你可以直接把这个二进制数据插入数据库中就可以了


insert 语句 插入数据sql语句应该没问题吧


高级一点, 你需一个二进制文件缓存队列,因为往数据库写操作也很慢的,


下载归下载,写入归写入.


风尘岁月 发表于 2021-1-2 15:44:17

孤独的嫖客 发表于 2021-1-2 14:49
图片并不适合用来存放进数据库,
通常情况下,数据库保存的是图片存放的路径,
假设以上你已经知晓,但还是期 ...

所以我该另外写一个专门用来进行写入的函数吗(用多线程){:10_256:}

风尘岁月 发表于 2021-1-2 19:08:50

孤独的嫖客 发表于 2021-1-2 14:49
图片并不适合用来存放进数据库,
通常情况下,数据库保存的是图片存放的路径,
假设以上你已经知晓,但还是期 ...

还有就是 不知为何我无法使用pymysql
这是报错信息
Traceback (most recent call last):
File "/home/wallen/.local/lib/python3.9/site-packages/pymysql/connections.py", line 569, in connect
    sock = socket.create_connection(
File "/usr/lib/python3.9/socket.py", line 822, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
File "/usr/lib/python3.9/socket.py", line 953, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: Name or service not known

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/wallen/demo.py", line 3, in <module>
    db = pymysql.connect("lolcalhost","root","0xFFFFFFFF","dbforpymysql")
File "/home/wallen/.local/lib/python3.9/site-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
File "/home/wallen/.local/lib/python3.9/site-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
File "/home/wallen/.local/lib/python3.9/site-packages/pymysql/connections.py", line 619, in connect
    raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'lolcalhost' ( Name or service not known)")

孤独的嫖客 发表于 2021-1-2 22:16:28

风尘岁月 发表于 2021-1-2 19:08
还有就是 不知为何我无法使用pymysql
这是报错信息
Traceback (most recent call last):


假设你的数据库可以正常远程的前提下,你的代码
db = pymysql.connect("lolcalhost","root","0xFFFFFFFF","dbforpymysql")
建议修改为这种格式
# 连接数据库
connect = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    passwd='root',
    db='python',
    charset='utf8'
)

然后看看会不会报错

然后数据库插入/更新问题
每插入一条都执行一个SQL语句,那么需要执行除了连接和关闭之外的所有步骤N次,这样是非常耗时的,可选的优化方式:
在每个insert语句中写入多行,批量插入
可以参考这个帖子
https://blog.csdn.net/colourless/article/details/41444069

风尘岁月 发表于 2021-1-3 08:09:49

孤独的嫖客 发表于 2021-1-2 22:16
假设你的数据库可以正常远程的前提下,你的代码

建议修改为这种格式


还是不行啊 大佬
而且看了那篇帖子 我也无法安装MySQL-python
我的是https://pypi.tuna.tsinghua.edu.cn/simple镜像源

孤独的嫖客 发表于 2021-1-3 08:13:38

风尘岁月 发表于 2021-1-3 08:09
还是不行啊 大佬
而且看了那篇帖子 我也无法安装MySQL-python
我的是https://pypi.tuna.tsinghua.edu.c ...

数据库是否支持远程,这个你检查了吗?
可以用可视化数据库客户端来快速测试数据库连接
常见软件Navicat
我举例的帖子,没说让你换模块
只是让你参考他写的sql语句

风尘岁月 发表于 2021-1-3 08:13:43

孤独的嫖客 发表于 2021-1-2 22:16
假设你的数据库可以正常远程的前提下,你的代码

建议修改为这种格式


我觉得应该放弃这种方式 改用JDBC来操作数据库了

风尘岁月 发表于 2021-1-3 09:49:18

孤独的嫖客 发表于 2021-1-3 08:13
数据库是否支持远程,这个你检查了吗?
可以用可视化数据库客户端来快速测试数据库连接
常见软件Navicat
...

数据库连线没有问题

记忆的欠片 发表于 2021-1-3 22:51:25

直接将图片以二进制写入数据库?
别吧,一张图片几十K,确定不先压缩一下?
使用zlib压缩二进制,然后使用base64编码,以字符串方式存入数据库
页: [1]
查看完整版本: 我想将图片的二进制数据 写入mysql数据库 请问哪位大佬能帮忙