Python MySql无法在同一目录中找到文件?
我正在尝试使用以下代码将图片加载到mysql数据库中:Python MySql无法在同一目录中找到文件?,python,mysql,file,Python,Mysql,File,我正在尝试使用以下代码将图片加载到mysql数据库中: cursor, db = get_db() cursor.execute("UPDATE People SET photo = LOAD_FILE(\'myphoto.jpg\')") cursor.close() db.commit() db.close() 我已经能够将photo设置为其他值,方法是将LOAD_FILE短语替换为更简单的短语,因此我知道问题源于加载图片。同时,myphoto.jpg位于运行代码的目录中。MySql毫无怨
cursor, db = get_db()
cursor.execute("UPDATE People SET photo = LOAD_FILE(\'myphoto.jpg\')")
cursor.close()
db.commit()
db.close()
我已经能够将photo设置为其他值,方法是将LOAD_FILE
短语替换为更简单的短语,因此我知道问题源于加载图片。同时,myphoto.jpg位于运行代码的目录中。MySql毫无怨言地执行这些命令,但实际上并没有将图片放入数据库。可能出现什么问题?我如何解决
操作系统是linux。检查文件是否加载到mysql中
select load_file('/currentdir/file.blob')
+-----------------------------+
| load_file('currentdir/file.blob') |
+-----------------------------+
| NULL |
+-----------------------------+
这可能是由于用户权限的原因
sudo chown mysql:mysql /currentdir/file.blob
我还读到,linux上有bug,这个问题可能会
由于apparmor
,禁用它可能会解决问题,请执行以下操作:
这是ubuntu上的/etc/init.d/apparmor stop
其他可能的原因
而且在linux中,您不必放置反斜杠,
LOAD\u文件(\'myphoto.jpg\)
,尝试不使用斜杠,LOAD\u文件('myphoto.jpg')
检查文件是否加载到mysql中
select load_file('/currentdir/file.blob')
+-----------------------------+
| load_file('currentdir/file.blob') |
+-----------------------------+
| NULL |
+-----------------------------+
这可能是由于用户权限的原因
sudo chown mysql:mysql /currentdir/file.blob
我还读到,linux上有bug,这个问题可能会
由于apparmor
,禁用它可能会解决问题,请执行以下操作:
这是ubuntu上的/etc/init.d/apparmor stop
其他可能的原因
而且在linux中,你也不必放置反斜杠,
LOAD\u FILE(\'myphoto.jpg\)
,尝试不用它们,LOAD\u FILE('myphoto.jpg')
操作系统?也许myphoto.jpg文件是旧图片。@RedCricket,你说它是旧图片是什么意思?也许是文件的内容,myphoto.jpg,是老照片,而不是新照片。尝试重命名文件,查看是否出现文件未找到错误。MySQL不知道代码从何处运行(它是一个通过api接收命令的服务器,代码可以从世界的另一端运行)<当发生任何类型的错误(例如,找不到、不可读等)时,code>load_file将返回null
,因此MySQL不抱怨这一事实并不意味着什么。添加路径!它必须在MySQL运行的同一台机器上(不管代码运行在哪个系统上)。如果您将ubuntu与apparmor一起使用,您还必须允许访问它。操作系统?可能myphoto.jpg文件是旧图片。@RedCricket,你说它是旧图片是什么意思?可能myphoto.jpg文件的内容是旧图片的内容,而不是新图片的内容。尝试重命名文件,查看是否出现文件未找到错误。MySQL不知道代码从何处运行(它是一个通过api接收命令的服务器,代码可以从世界的另一端运行)<当发生任何类型的错误(例如,找不到、不可读等)时,code>load_file将返回null
,因此MySQL不抱怨这一事实并不意味着什么。添加路径!它必须在MySQL运行的同一台机器上(不管代码运行在哪个系统上)。如果您将ubuntu与apparmor一起使用,您还必须允许访问它。