# 关于插入程序的说明
- 前期准备:
- 表结构:`****.sql`
- 建表后,字段`id` 为 **自增**
- 完成建表后在本地生成`model.py` 使用peewee包(`pip install peewee`),在python所在的Lib\site-packages文件夹下打开cmd输入:
>
python -m pwiz -e mysql -H'数据库所在位置ip' -p3306 -u'你的用户名' -P '数据库名' >models.py
- 如:
>
python -m pwiz -e mysql -H localhost -p3306 -uroot -P full_cnki_text >models.py
Password: ‘你的密码’(输入数据库密码)- 文件夹准备:
- 全部文件放到统一的文件夹`test`中,可以按需要修改程序中文件夹名称。
- 运行:
>
python insert_txt2sql.py
insert_txt2sql.py:
# coding=utf-8
"""
- 获取文件夹下所有的爬取结果文件名
- 以文件为单位批量导入数据库
- 注意: 全部txt需放到统一的文件夹中,如‘test’,修改第20行path(文件位置)
"""
from models import *
import os
import json
import pandas as pd
def get_files(path):
# 返回文件夹名
for _, _, files in os.walk(path):
return files
def main():
path = r'D:\dev\2020\04chiir论文统计分析\dev\chiir-analysis\data\annotation_2016.csv' # 遍历的文件名,可按需要修改
df=pd.read_csv(path,encoding='utf-8')
a=df.to_json(orient='records',force_ascii=False)
a=a.replace(':null',":''")
print(a)
dict1={'author':'\ufeffauthor',
'cpl文献批评':'cpl',
'问卷or数据':'data',
'gap现有空白':'gap',
'模型or方法':'method',
'poc批评点':'poc',
'page_num':'page',
'rat理论依据':'rat',
'rcl与已有一致的发现':'rcl',
'rfw未来研究的建议':'rfw',
'rof研究发现':'rof',
'rtc与已有矛盾的发现':'rtc',
'spl文献综述':'spl',
'theory':'theory',
'title':'title',
'wtd作者想做什么':'wtd',
'wtdd作者实际做了什么':'wtdd'}
res=[]
for line in eval(a):
res_dict={}
for k in dict1:
v = dict1[k]
if v in line :
d = line[v]
res_dict[k] = d
elif k in line:
d = line[k]
res_dict[k]=d
res.append(res_dict)
Annotation2016.insert_many(res).execute() # 满足大批量插入构造条件,直接全部插入即可
print('--插入完成')
if __name__ == "__main__":
main()
models.py:
from peewee import *
database = MySQLDatabase('chiir_annotation', **{'port': 3306, 'use_unicode': True, 'user': 'root', 'host': 'localhost', 'charset': 'utf8', 'sql_mode': 'PIPES_AS_CONCAT', 'password': 'root'})
class UnknownField(object):
def __init__(self, *_, **__): pass
class BaseModel(Model):
class Meta:
database = database
class Annotation2016(BaseModel):
cpl文献批评 = TextField(column_name='CPL文献批评', null=True)
gap现有空白 = TextField(column_name='GAP现有空白', null=True)
poc批评点 = TextField(column_name='POC批评点', null=True)
rat理论依据 = TextField(column_name='RAT理论依据', null=True)
rcl与已有一致的发现 = TextField(column_name='RCL与已有一致的发现', null=True)
rfw未来研究的建议 = TextField(column_name='RFW未来研究的建议', null=True)
rof研究发现 = TextField(column_name='ROF研究发现', null=True)
rtc与已有矛盾的发现 = TextField(column_name='RTC与已有矛盾的发现', null=True)
spl文献综述 = TextField(column_name='SPL文献综述', null=True)
theory = TextField(column_name='THEORY', null=True)
wtdd作者实际做了什么 = TextField(column_name='WTDD作者实际做了什么', null=True)
wtd作者想做什么 = TextField(column_name='WTD作者想做什么', null=True)
author = CharField(null=True)
page_num = IntegerField(null=True)
title = CharField(null=True)
模型or方法 = TextField(null=True)
问卷or数据 = TextField(null=True)
class Meta:
table_name = 'annotation_2016'
primary_key = False
class Annotation2017(BaseModel):
cpl文献批评 = TextField(column_name='CPL文献批评', null=True)
gap现有空白 = TextField(column_name='GAP现有空白', null=True)
poc批评点 = TextField(column_name='POC批评点', null=True)
rat理论依据 = TextField(column_name='RAT理论依据', null=True)
rcl与已有一致的发现 = TextField(column_name='RCL与已有一致的发现', null=True)
rfw未来研究的建议 = TextField(column_name='RFW未来研究的建议', null=True)
rof研究发现 = TextField(column_name='ROF研究发现', null=True)
rtc与已有矛盾的发现 = TextField(column_name='RTC与已有矛盾的发现', null=True)
spl文献综述 = TextField(column_name='SPL文献综述', null=True)
theory = TextField(column_name='THEORY', null=True)
wtdd作者实际做了什么 = TextField(column_name='WTDD作者实际做了什么', null=True)
wtd作者想做什么 = TextField(column_name='WTD作者想做什么', null=True)
author = CharField(null=True)
page_num = IntegerField(null=True)
title = CharField(null=True)
模型or方法 = TextField(null=True)
问卷or数据 = TextField(null=True)
class Meta:
table_name = 'annotation_2017'
primary_key = False
class Annotation2018(BaseModel):
cpl文献批评 = TextField(column_name='CPL文献批评', null=True)
gap现有空白 = TextField(column_name='GAP现有空白', null=True)
poc批评点 = TextField(column_name='POC批评点', null=True)
rat理论依据 = TextField(column_name='RAT理论依据', null=True)
rcl与已有一致的发现 = TextField(column_name='RCL与已有一致的发现', null=True)
rfw未来研究的建议 = TextField(column_name='RFW未来研究的建议', null=True)
rof研究发现 = TextField(column_name='ROF研究发现', null=True)
rtc与已有矛盾的发现 = TextField(column_name='RTC与已有矛盾的发现', null=True)
spl文献综述 = TextField(column_name='SPL文献综述', null=True)
theory = TextField(column_name='THEORY', null=True)
wtdd作者实际做了什么 = TextField(column_name='WTDD作者实际做了什么', null=True)
wtd作者想做什么 = TextField(column_name='WTD作者想做什么', null=True)
author = CharField(null=True)
page_num = IntegerField(null=True)
title = CharField(null=True)
模型or方法 = TextField(null=True)
问卷or数据 = TextField(null=True)
class Meta:
table_name = 'annotation_2018'
primary_key = False
class Annotation2019(BaseModel):
cpl文献批评 = TextField(column_name='CPL文献批评', null=True)
gap现有空白 = TextField(column_name='GAP现有空白', null=True)
poc批评点 = TextField(column_name='POC批评点', null=True)
rat理论依据 = TextField(column_name='RAT理论依据', null=True)
rcl与已有一致的发现 = TextField(column_name='RCL与已有一致的发现', null=True)
rfw未来研究的建议 = TextField(column_name='RFW未来研究的建议', null=True)
rof研究发现 = TextField(column_name='ROF研究发现', null=True)
rtc与已有矛盾的发现 = TextField(column_name='RTC与已有矛盾的发现', null=True)
spl文献综述 = TextField(column_name='SPL文献综述', null=True)
theory = TextField(column_name='THEORY', null=True)
wtdd作者实际做了什么 = TextField(column_name='WTDD作者实际做了什么', null=True)
wtd作者想做什么 = TextField(column_name='WTD作者想做什么', null=True)
author = CharField(null=True)
page_num = IntegerField(null=True)
title = CharField(null=True)
模型or方法 = TextField(null=True)
问卷or数据 = TextField(null=True)
class Meta:
table_name = 'annotation_2019'
primary_key = False