iOS - .sql文件转.plist文件
后台调用地址的接口,是十条十条的获取,数据又那么多让,让后台弄个sqlite文件给我,本地加载。她说不会弄,丢了个.sql文件过来了,让我自己弄。想了想就应下了,对公司的唯一女性,还是要照顾一下。
.sql文件 是mysql数据库导出的备份文件,IOS能不能直接用呢?暂时也没想到,倒是想到几个可以获取到数据的方法。
1.转成 json 字符串.
2.转成 db 数据库文件.
3.转成 plist 文件.
不用猜都知道我转成 plist 文件,标题写着呢。但转成 plist 文件也是最难的,教程也少。虽少,倒也不至于让我后退。在网上找了许久,找到一篇很有用的博客。(人生苦短 我用Python——iOS开发之.sql文件转.plist文件)
虽然不会 Python 语言,但大多都能看得懂,就开始干了。
一、下载所需工具
第一步需要把 .sql 文件传到 mysql 数据库中。
- MySQL Workbench客户端 MySQL Workbench客户下载
- MySQL数据库的服务器,这是下载地址MySQL服务器下载
但在启动 mysql 时失败了,“Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql' ” 解决方法
这个问题还是很普遍的,很容易就找到解决方法。
终端运行:
sudo chown -R _mysql:wheel /usr/local/mysql/data
回车之后,就显示运行中。
接下来配置数据库了,首先打开MySQL Workbench,如下图:
选择 Manage Connections 创建一个连接二、终端环境配置
终端访问MySQL数据库的配置,一般情况下,第一次在终端使用mysql命令时会出现如下情况:
出现该情况的原因是因为虽然上面我们装了MySQL环境,但是它所在的路径与终端查询命令的路径不同,解决方案呢是通过增加环境变量的方式来将MySQL路径增加到终端命令查询路径里就可以了,在系统的.bash_profile中加入“export PATH=${PATH}:/usr/local/mysql/bin”,如下
bogon:Desktop GuoBin$ cd
bogon:~ GuoBin$ vim .bash_profile
# Setting PATH for Python 3.6
# The original version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/3.6/bin:${PATH}"
export PATH
alias python="/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6/bin/python3.6"
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
##
# Your previous /Users/GuoBin/.bash_profile file was backed up as /Users/GuoBin/.bash_profile.macports-saved_2018-03-11_at_00:50:14
##
# MacPorts Installer addition on 2018-03-11_at_00:50:14: adding an appropriate PATH variable for use with MacPorts.
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
# Finished adapting your PATH environment variable for use with MacPorts.
export PATH=${PATH}:/usr/local/mysql/bin
~
~
".bash_profile" [noeol] 21L, 861C
:wq 回车,保存退出
每次编辑后要使用 'source .bash_profile'
bogon:~ GuoBin$ source .bash_profile
命令重新加载一次刚配置好的文件,记住是每次改动之后都要使用该命令重新加载一下才会生效。
好了,再试一下:
bogon:~ GuoBin$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
这里出了点问题,好像是说没有密码。额,一时间也记不得在哪设置过密码的,有点尴尬,上百度搜了下,才找到原因,是因为 mac 在安装 mysql 时系统会自动为 root 账户生成一个密码,疏忽了。还好找到了重置 mysql 密码方法。
mac中mysql的root账户初始密码忘记的解决办法
step1:
关闭mysql服务: 苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务(点击stop mysql server)
step2:
1. bogon:~ GuoBin$ cd /usr/local/mysql/bin/ (进入到 mysql bin 文件中)
2. bogon:bin GuoBin$ sudo su (登录管理员权限)
Password: (输入密码)
3. sh-3.2# ./mysqld_safe --skip-grant-tables & (回车后mysql会自动重启(偏好设置中mysql的状态会变成running))
[1] 16631
sh-3.2# 2018-06-24T12:18:24.6NZ mysqld_safe Logging to '/usr/local/mysql/data/bogon.err'.
2018-06-24T12:18:24.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
step3:
1. ./mysql (输入命令 ./mysql 回车)
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 80
Server version: 5.7.11 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
2. mysql> FLUSH PRIVILEGES; (输入命令 FLUSH PRIVILEGES; 回车)
Query OK, 0 rows affected (0.06 sec)
3. mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
修改上面的 '你的新密码',回车就好了
现在就可以用新设置的密码去登陆mysql
bogon:~ GuoBin$ mysql -u root -p (回车在输入密码就成功的连上了 mysql)
Your MySQL connection id is 228
Server version: 5.7.11 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
三、加载.sql文件到本地数据库 (下面内容来自(人生苦短 我用Python——iOS开发之.sql文件转.plist文件))
一般我们有些常用的数据可能会保存到数据库,当然,网上也可以找到很多别人分享的sql数据库文件,那么我们从网上找到这些文件之后该如何查看,或者说如何转换成我们想要的文件呢?接下来我就以跟“度娘”要来的一份各个国家手机代码的数据库文件为例给大家分享一下如何查看本地数据库文件和数据库文件格式的转换,准确的说应该是将数据库文件中的数据读取出来重新写入到我们想要的格式文件中。
下载下来的数据库文件呢是这样子的:
我们呢需要对其做个修改,其实看的懂的小伙伴们已经知道这个sql文件只是写了一句插入数据的SQL语句,前面我们说过,界面操作的本质还是执行SQL语句,所以接下来我们对这个文件做个修改,在文件前面加点东西,修改内容如下图所示:
到这里呢需要使用的文件就准备好了,值得一提的是上图修改内容里有一个“utf8mb4”的编码,关于这个编码方式每个sql数据库文件不是完全相同的,所以如果你导入后发现数据乱码,那么可以试着修改一下这个编码方式之后再重新导入。好了,接下来就要加载这个sql文件了,按照下图继续操作:
OK,到这里本地sql文件的加载工作就全部做完了,我们可以打开MySQL Workbench看看我们的劳动成果,可以看到如下结果:
四、配置Python环境
话说自Mac OS具体哪个版本来说我也不记得了,系统就已经自带了Python环境,这里要说明的一点是系统中是可以同时兼容多个Python版本的,所以我们这里为了不影响系统的Python环境,那么接下来我们自己安装一个新的Python环境,安装命令很简单,使用brew一句话搞定,具体见下图,关于Home brew是什么还不清楚的小伙伴们请自行脑补了,这里我就不多说了,用过Cocoapods,升级过ruby的人都知道,谁用谁知道~~哈哈,言归正传,请看下图:
bogon:~ GuoBin$ brew install python
这里需要说明一下,使用该命令安装Python默认的路径是/user/local/bin/python,
不需要指定路径,所以终端工作在什么路径下并不重要。
Python安装完成后如下图:
Python安装完成后终端可以看到输出的这些内容,其中我红线框出来的部分稍微解释一下,第一部分提示我们安装Python的同时为我们安装了pip和setuptools,关于这两个又是什么鬼还是请大家自行百度,不过我这里说一下这个pip,我们可以把这个pip看成是Python中的“pop”,同样是用来管理第三方库的,接下来我们会用到这个。第二部分就提示了我们要如何使用这个pip来安装Python需要的第三方库和将会安装到哪里去。那么不妨我们接下来就使用一下这个pip,安装一下我们将要使用到的第三方库,就一个操作MySQL的库叫MySQL-python,键入下图中的命令:
PS:我下载的Python是3.6 ,附带下来的提示是 pip3 ,在使用的时候提示没有找到 pip 命令。
bogon:~ GuoBin$ pip --version
-bash: pip: command not found
还是在百度,找到了关键命令
bogon:~ GuoBin$ python3 -m pip -V
pip 10.0.1 from /usr/local/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/pip (python 3.6)
上面说过 mac 系统可以兼容多个Python版本,而 pip 是在 python3 附带下来的,所以要指定 python 版本来操作(自认为。。。)
下面用 pip 来下载 MySQL-python.
bogon:~ GuoBin$ python3 -m pip install MySQL-python
Collecting MySQL-python
Using cached https://files.pythonhosted.org/packages/a5/e9/51b544da85a36a68debe7a7091f068d802fc515a3a202652828c73453cad/MySQL-python-1.2.5.zip
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/s4/2dkfb0cn45j74f0f0k98lvwh0000gn/T/pip-install-aggvdw2f/MySQL-python/setup.py", line 13, in <module>
from setup_posix import get_config
File "/private/var/folders/s4/2dkfb0cn45j74f0f0k98lvwh0000gn/T/pip-install-aggvdw2f/MySQL-python/setup_posix.py", line 2, in <module>
from ConfigParser import SafeConfigParser
ModuleNotFoundError: No module named 'ConfigParser'
----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/s4/2dkfb0cn45j74f0f0k98lvwh0000gn/T/pip-install-aggvdw2f/MySQL-python/
下载失败了
‘Command "python setup.py egg_info" failed with error code 1 in /private/var/folders/s4/2dkfb0cn45j74f0f0k98lvwh0000gn/T/pip-install-aggvdw2f/MySQL-python/’
又是费了好大劲找到了方法
https://stackoverflow.com/questions/14087598/python-3-importerror-no-module-named-configparser
有的说MySQL-python 不支持 Python 3.6的版本,有的说某个文件名改一下就好了,里面好多方法试了都不行,在最下面倒是看到一个代替 MySQL-python 的第三方,抱着试一试的态度下载下来后面。(PS:后面证实,可用)
bogon:~ GuoBin$ python3 -m pip install mysqlclient
成功后在下载另一个第三方
这是一个操作plist文件的,所以继续往下走,这里对plist文件的操作我们采用biplist这个第三方库,安装方式如下图,使用方式请小伙伴们点击链接移步github自行参阅。
安装好这个biplist之后我们还需要做一件事情,就是跟之前一样在.bash_profile中添加一个环境变量,添加字段
export DYLD_LIBRARY_PATH="/usr/local/mysql/lib"
保存退出后记得 source .bash_profile
如下图:
Python环境就基本上配置完成了
五、生成 plist 文件
在 xcode 中新建一个项目,创建一个空的 plist 文件。
创建plist文件完成后做一个如下操作,将创建好的plist的root改为“Array”
把这个plist文件复制到桌面来。
接下来创建一个Python脚本文件,如下,直接终端touch一下就完事了。
bogon:~ GuoBin$ cd Desktop/
bogon:Desktop GuoBin$ touch sands.py
我是在桌面找到这个文件,然后用 xocde 打开
我是看着上面的照片一个一个敲下来的。。。
抄完来运行下
bogon:Desktop GuoBin$ python sands.py
运行失败啊~~~报下面的错误
Python: '>' not supported between instances of 'builtin_function_or_method' and 'int'?
rows.count 可能不是一个int类型,我看了下这个判断里面没什么东西,所以都注释点了。
在编译
bogon:Desktop GuoBin$ python sands.py
这一次报的错是 print 要给它加个括号
在编译 又报错,这次是 报 e 未知吧,所以我把e 删了
except (InvalidPlistException,NotBinaryPlistException),e:
修修补补就成下面这样了
#coding:utf-8
#导入操作数据库的第三方库
import MySQLdb
#导入操作plist文件的第三方库
from biplist import *
#导入编码模块
import codecs
#连接数据库
connect = MySQLdb.connect(host='localhost',user='root',password='bendan',db='country',charset='utf8mb4')
#获取操作游标
cursor = connect.cursor()
#执行sql语句
count = cursor.execute('select * from country.country_codes')
#获取所有数据
rows = cursor.fetchall()
#判断数据库是否读取成功
#rowCount = int(rows.count)
#if rowCount > 0:
# print ("数据库读取成功,共读取到 %d 条数据"%(len(rows)))
#else:
# print ("数据库读取失败,共读取到 %d 条数据"%(len(rows)))
#定义一个list,闲相当于数组
result_list = []
#遍历上面获取到所有数据,将每条数据构造成一个字典添加到数组中
for row in rows:
dic = {'id': row[0],
'name':row[1],
'parent_id':row[2],
'sort_order':row[3],
'user_id':row[4],
}
result_list.append(dic)
#将result_list 写入到plist 文件
print ("将要开始写入文件...,共读取到 %d 条数据"%(len(rows)))
try:
print ("正在写入...")
writePlist(result_list,"/Users/GuoBin/Desktop/City.plist")
except (InvalidPlistException,NotBinaryPlistException):
print ("something bad happened")
#关闭数据库连接
connect.close()
print ("文件写入成功")
在编译
bogon:Desktop GuoBin$ python sands.py
将要开始写入文件...,共读取到 4891 条数据
正在写入...
文件写入成功
终于成功了 泪流满面啊~~
屏幕快照 2018-06-24 下午10.09.13.png在这里感谢 Sands_Lee 的分享,让我解决了一大问题。