Python Forum
pymysql: insert query throws error
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
pymysql: insert query throws error
#1
hi,

i',m trying to parse sudo files and inserting the results into a mysql table for eaysier analyzing an so on. parsing works well sof far, but pymysql will not let me do the insert.

the script:

#!/usr/bin/env python3


import sys
import os
import pprint
from collections import defaultdict
import pymysql
import pymysql.cursors
from SudoersLib import *

input_path="/admin/sudoers"
infiles= os.listdir(input_path)

connection = pymysql.connect(host='localhost',
                             user='sudodb',
                             password='sudodb',
                             database='sudoersdb',
                             cursorclass=pymysql.cursors.DictCursor)


for infile in infiles:
    infile=os.path.join(input_path, infile)
    sudo_obj = Sudoers(path=infile)
    file_name = os.path.basename(infile)
    sudohost = file_name.split('-')[1]
    results = defaultdict(list)
    sudo_host_list = []
    sudo_host_list.append(sudohost)
    results['sudohost'].append(sudo_host_list)

    for key in sudo_obj.host_aliases:
        host_alias_list = []
        host_alias_list.append((key, sudo_obj.host_aliases[key]))
        results['hostalias'].append(host_alias_list)
    for key in sudo_obj.cmnd_aliases:
        cmnd_alias_list = []
        cmnd_alias_list.append((key, sudo_obj.cmnd_aliases[key]))
        results['cmndalias'].append(cmnd_alias_list)
    for key in sudo_obj.runas_aliases:
        runas_alias_list = []
        runas_alias_list.append((key, sudo_obj.runas_aliases[key]))
        results['runasalias'].append(runas_alias_list)
    for key in sudo_obj.user_aliases:
        user_alias_list = []
        user_alias_list.append((key, sudo_obj.user_aliases[key]))
        results['useralias'].append(user_alias_list)
    for rule in sudo_obj.rules:
        users_list = []
        hosts_list = []
        rules_list = []
        users_list.append((rule["users"]))
        results['users'].append(users_list)
        hosts_list.append((rule["hosts"]))
        results['hosts'].append(hosts_list)
        rules_list.append((rule["users"], rule["hosts"], (rule["commands"])))
        results['commands'].append(rules_list)
        #print("%s|%s|%s|%s" % (sudohost, ",".join(rule["users"]), ",".join(rule["hosts"]), ",".join(map(str, rule["commands"]))))

        cursor = connection.cursor()
        qmarks = ",".join('?' * len(results))
        qry = "INSERT INTO rules (%s) VALUES (%s)" % (qmarks, qmarks)
        qvals = *results.keys(), *results.values()
        qvals_stringed = ','.join(map(str, qvals))
        print(type(qvals_stringed))
        print(qry, qvals_stringed)
        cursor.execute(qry, qvals_stringed)
        connection.commit()
example insert line printout:
<class 'str'>
INSERT INTO rules (?,?,?,?) VALUES (?,?,?,?) sudohost,users,hosts,commands,[['aixacodbt']],[[['root']]],[[['ALL']]],[[(['root'], ['ALL'], [{'run_as': ['ALL'], 'tags': None, 'command': 'ALL'}])]]
root@nimvie: /home/tremch/scripts # ./sudoers_parse.py
<class 'str'>
INSERT INTO rules (?,?,?,?) VALUES (?,?,?,?) sudohost,users,hosts,commands,[['aixacodbt']],[[['root']]],[[['ALL']]],[[(['root'], ['ALL'], [{'run_as': ['ALL'], 'tags': None, 'command': 'ALL'}])]]
Traceback (most recent call last):
  File "./sudoers_parse.py", line 67, in <module>
    cursor.execute(qry, qvals_stringed)
  File "/opt/freeware/lib/python3.7/site-packages/pymysql/cursors.py", line 161, in execute
    query = self.mogrify(query, args)
  File "/opt/freeware/lib/python3.7/site-packages/pymysql/cursors.py", line 140, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not all arguments converted during string formatting
Error:
<class 'str'> INSERT INTO rules (?,?,?,?) VALUES (?,?,?,?) sudohost,users,hosts,commands,[['aixacodbt']],[[['root']]],[[['ALL']]],[[(['root'], ['ALL'], [{'run_as': ['ALL'], 'tags': None, 'command': 'ALL'}])]] Traceback (most recent call last): File "./sudoers_parse.py", line 67, in <module> cursor.execute(qry, qvals_stringed) File "/opt/freeware/lib/python3.7/site-packages/pymysql/cursors.py", line 161, in execute query = self.mogrify(query, args) File "/opt/freeware/lib/python3.7/site-packages/pymysql/cursors.py", line 140, in mogrify query = query % self._escape_args(args, conn) TypeError: not all arguments converted during string formatting
any tips welcome..

wbr

chris
Reply


Messages In This Thread
pymysql: insert query throws error - by wardancer84 - Jan-21-2022, 12:54 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  sqlite3 Conn Insert Value Error TylerDunbar 3 774 Sep-04-2023, 06:32 PM
Last Post: deanhystad
  pymysql; insert on duplicate key update fails wardancer84 4 2,064 Jun-28-2022, 08:14 PM
Last Post: Larz60+
  Mysql Syntax error in pymysql ilknurg 4 2,411 May-18-2022, 06:50 AM
Last Post: ibreeden
  Mysql error message: Lost connection to MySQL server during query tomtom 6 16,251 Feb-09-2022, 09:55 AM
Last Post: ibreeden
  Query Syntax Error hammer 2 1,647 Jan-03-2022, 02:30 PM
Last Post: hammer
  pymysql can't do SELECT * Pedroski55 3 3,012 Sep-11-2021, 10:18 PM
Last Post: Pedroski55
  TypeError: sequence item 0: expected str instance, float found Error Query eddywinch82 1 5,179 Sep-04-2021, 09:16 PM
Last Post: eddywinch82
  Error using mariadb select query with form in python? shams 2 2,040 Jul-29-2021, 12:30 PM
Last Post: shams
  pyarrow throws oserror winerror 193 1 is not a valid win32 application aupres 2 3,825 Oct-21-2020, 01:04 AM
Last Post: aupres
  Function throws error but then works? Milfredo 10 3,839 Sep-12-2020, 05:16 AM
Last Post: Milfredo

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020