SOL4Py Sample: InsertIntoTableThread

SOL4Py Samples



#******************************************************************************
#
#  Copyright (c) 2020 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED.
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
#******************************************************************************


# 2020/01/30
# See also https://stackoverflow.com/questions/5241031/python-inserting-and-retrieving-binary-data-into-mysql

# encoding: utf-8
0
# InsertIntoTableThread.py


"""
create table test.User (
  id             bigint unsigned not null primary key auto_increment,
  auth_token     varchar(40)    default NULL,          
  email          varchar(255)   unique default NULL,
  password       varchar(512)   default NULL,      #(AES IV) + (AES ENCRUPTED Password) 
  validated      bool           default False,     
  last_modified  datetime       default NOW()
);

"""


import sys
import os
import configparser

sys.path.append('../')

from SOL4Py.ZMain  import *
import base64

from SOL4Py.mysql.ZMySQLDB  import *
from SOL4Py.mysql.ZThreadedMySQLConnection  import *

from SOL4Py.crypto.ZAESIVEmbeddedCipher import *
from SOL4Py.generator.ZTokenGenerator import *
from SOL4Py.generator.ZEmailAddressGenerator import *
from SOL4Py.generator.ZPasswordGenerator import *


# Define your own thread class derived from ZThreadedMySQLConnection.

class InsertIntoTableThread(ZThreadedMySQLConnection):
  def __init__(self, connection):
    super().__init__(connection)

  
  def run(self):
    try:
      for i in range (1000):
          token_generator = ZTokenGenerator()
          email_generator = ZEmailAddressGenerator()
          pass_generator  = ZPasswordGenerator()

          atoken   = token_generator.generate(20)
          email    = email_generator.generate()
          password = pass_generator.generate()
          
          key  = email
          cipher = ZAESIVEmbeddedCipher(ZCipher.AS_HEX) 
          hex_iv_password = cipher.encrypt(password, key)
          print("No: {}".format(i))        
          print("Auth_token   {}".format(atoken))
          print("Email        {}".format(email))
          
          print("Password     {}".format(password)) 
          try:
              sql    = "INSERT INTO test.User (auth_token, email, password) VALUES(%s, %s, %s)"
              values = (atoken, email, hex_iv_password)
              
              self.cursor.execute("INSERT INTO test.User (auth_token, email, password) VALUES(%s, %s, %s)", (atoken, email, hex_iv_password))
          except:
              traceback.print_exc()

      self.commit()
          
    except:
      traceback.print_exc()
      self.rollback()
      

if main(__name__):
  # user password database 
  # foo password  test
  
  db =  ZMySQLDB(argv=sys.argv)
  
  try:
    insertion_thread = InsertIntoTableThread(db.connection)
    insertion_thread.start()
    insertion_thread.join()
    
  except:
    traceback.print_exc()
    db.rollback()  
  finally:
    db.connection.close()
 
  

Last modified:27 Jan. 2020