# 关于插入程序的说明
 - 前期准备:
     - 表结构:`****.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