意义
为什么要远程访问数据库?其实我也不知道。百度说:…… 好的其实并没有百度到。简单的说,我们把数据存在一台电脑,一般只能由这台电脑访问数据库,但这往往不能满足我们的需求。所以远程访问数据库成为了一项我们需要掌握的技术。(没错,说了这么久,我还是不太明白他的意义)下面,我们开始来介绍如何远程连接数据库与可能遇到的问题。
远程访问数据库
首先,我们在被访问的数据主机上进行配置。在Django的settings进行配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'd_name', #数据库名
'USER': 'root',
'PASSWORD': '111222',
'HOST': '192.168.235.72', #本机IP
'PORT': 3306,
}
}
注意:访问的主机和被访问的主机必须在同一个局域网
另外,我们还需要开启远程访问数据权限。首先进入到数据库
mysql -u root -p
输入密码,进入数据库。然后开启权限。输入
grant all PRIVILEGES on * . * to root@’%’ identified by ‘密码’;
注意:其中为密码可以为空。建议设为数据库的密码。
再输入
flush privileges;
再重启数据库
/etc/init.d/mysql restart
如果不行要使用超级权限。
sudo /etc/init.d/mysql restart
如果连接失败,则
sudo vim /etc/mysql/my.cnf
将
#bind-address = 127.0.0.1
注释掉。如果vim没安装,则输入
sudo apt-get install vim
进入cnf文件后,先找到 #bind-address = 127.0.0.1这一行,按 i ,即可插入。再按 Esc 退出,最后按 :wq 保存。
这样基本上完成被访问主机的设置。
接下来,我们就可以在其他电脑远程访问数据库了。在这里我们可以建一个py文件来连接数据库。
import MySQLdb
conn = MySQLdb.connect(host="IP",user="root",passwd="密码",db="d_name")
# 其中IP为被访问主机IP,d_name为数据库名
conn.select_db("d_name")
cursor = conn.cursor()
cursor.execute("数据库语句") # 具体的数据库操作语句
jg = cursor.fetchall()
print jg # 输出操作结果
cursor.close()
conn.close()
注意:由于编码问题中文会出现乱码,在代码中这一行中修改
conn = MySQLdb.connect(host="IP",user="root",passwd="密码",db="d_name",charset="utf8")
就可以解决乱码问题了