【Python】批量写mysql与单引号双引号处理

# coding:utf-8

"""
寻找参考文献异常的记录
"""

from util.DBUtil import MySQL
import pymysql

mysql = MySQL()

def run():
    mysql.query("select pmid,section, reference_ids, paragraph,pmc from full_texts")
    result = mysql.show()
    cnt = 0
    total_cnt = 0
    sql = "insert into full_texts_abnormal_ref(pmid,pmc, section, reference_ids, paragraph) values"
    for row in result:
        pmid = row[0]
        section = row[1]
        reference_ids = row[2]
        paragraph = row[3]
        pmc = row[4]
        reference_ids_list = eval(reference_ids)

        if len(reference_ids_list) > 0:
            for ref in reference_ids_list:
                es = ref.split('.')
                if len(es) == 2:
                    if cnt > 0:
                        sql += ' ,'
                    sql += "('{}','{}','{}','{}','{}')".format(pmid, pmc, pymysql.escape_string(section), pymysql.escape_string(reference_ids),
                                                               pymysql.escape_string(paragraph))
                    # print(sql)
                    cnt += 1
                    if cnt % 10000 == 0:
                        mysql.query(sql)
                        mysql.commit()
                        sql = "insert into full_texts_abnormal_ref(pmid,pmc, section, reference_ids, paragraph) values"
                        cnt = 0
                    break
        total_cnt += 1
        if total_cnt % 1000 == 0:
            print('processed :', total_cnt)
    if cnt > 0:
        mysql.query(sql)
        mysql.commit()
    print('total cnt: ', cnt)

if __name__ == '__main__':
    run()
MySQL类代码:
# -*- coding:utf-8 -*-

import pymysql
import sys

__all__ = ['MySQL']


class MySQL(object):
    '''
    MySQL
    '''
    conn = ''
    cursor = ''

    def __init__(self, host='localhost', user='root', passwd='root', db='plos_one'):

        """MySQL Database initialization """
        try:
            self.conn = pymysql.connect(host, user, passwd, db,charset="utf8")
        except Exception:
            sys.exit()

        self.cursor = self.conn.cursor()

    def query(self, sql):
        """  Execute SQL statement """
        return self.cursor.execute(sql)

    def commit(self):
        """ Return the results after executing SQL statement """
        return self.conn.commit()

    def show(self):
        """ Return the results after executing SQL statement """
        return self.cursor.fetchall()

    def __del__(self):
        """ Terminate the connection """
        self.conn.close()
        self.cursor.close()


# test
if __name__ == '__main__':
    mysql = MySQL()
    mysql.query("select user_id from user where has_relation = '0' limit 1")
    result = mysql.show()
    for row in result:
        userid = row[0]
        print(userid[0])
        sql = "UPDATE user SET has_relation = '1' WHERE user_id = '%s'" %userid
        print(sql)
        mysql.query(sql)

 

你可以使用Python的csv库来读取CSV文件并将其入数据库。首先,你需要使用csv.reader()函数读取CSV文件。这个函数将返回一个迭代器,每次迭代可以得到一行数据。然后你可以使用数据库的插入语句将数据插入到数据库中。 例如: ``` import csv import MySQLdb # Open the CSV file with open('data.csv', 'r') as f: # Create a CSV reader reader = csv.reader(f) # Connect to the database conn = MySQLdb.connect(host='localhost', user='username', password='password', database='database_name') cursor = conn.cursor() # Insert each row into the database for row in reader: cursor.execute('INSERT INTO table_name (column1, column2, column3) VALUES (%s, %s, %s)', row) # Close the connection conn.commit() conn.close() ``` 在这个例子中,我们使用MySQLdb库来连接到MySQL数据库,然后使用cursor.execute()函数执行SQL插入语句。注意,你需要将数据作为参数传递给execute()函数,这样可以避免SQL注入攻击。 如果你的数据中含有单引号双引号,你可以使用MySQLdb库中的MySQLdb.escape_string()函数来对数据进行转义。例如: ``` import MySQLdb def escape_string(s): return MySQLdb.escape_string(s).decode('utf-8') # ... for row in reader: escaped_row = [escape_string(cell) for cell in row] cursor.execute('INSERT INTO table_name (column1, column2, column3) VALUES (%s, %s, %s)', escaped_row) ``` 这样可以帮助你避免SQL注入攻击,同时保证数据的完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值