python异常捕获和写到mysql_将数据插入mysql数据库时发生Python未捕获异常

我有一个pythonaws lambda函数,它获取JSON记录,检查它们是否有必需的键,然后插入MySQL数据库(awsrdsaurora)。每当新记录进入流def handler时,就会调用该函数。在

目前,Lambda报告了一些错误,但是当我查看cloudwatch日志时,我没有看到任何错误,这让我相信可能我没有处理或捕捉异常。谁能告诉我问题出在哪里吗?在from __future__ import print_function

import base64

import json

import pymysql

RDS_HOST = 'host'

DB_USER = 'dummy_user'

DB_PASSWORD = 'password1234'

DB_NAME = 'crazy_name'

DB_TABLE = 'wow_table'

class MYSQL(object):

'''

This a wrapper Class for PyMySQL

'''

CONNECTION_TIMEOUT = 30

def __init__(self, host, user, password, database, table):

self.host = host

self.user = user

self.password = password

self.database = database

self.table = table

self.connection = self.connect()

def connect(self):

'''

Connects to MySQL instance

'''

try:

connection = pymysql.connect(

host=self.host,

user=self.user,

password=self.password,

db=self.database,

connect_timeout=self.CONNECTION_TIMEOUT

)

return connection

except Exception as ex:

print(ex)

print("ERROR: Unexpected error: Could not connect to AuroraDB instance")

def execute(self, account_id, external_ref_id, timestamp):

'''

Executes command given a MySQL connection

'''

with self.connection.cursor() as cursor:

sql = ('INSERT INTO ' +

self.database +

'.' +

self.table +

'(`account_id`, `external_reference_id`, `registration`, `c_name`, `c_id`, `create_date`)' +

' VALUES (%s, %s, DATE_FORMAT(STR_TO_DATE(%s,"%%Y-%%M-%%d %%H:%%i:%%s"),"%%Y-%%m-%%d %%H:%%i:%%s"), %s, %s, current_timestamp())' +

' ON DUPLICATE KEY UPDATE create_date = VALUES(create_date)')

cursor.execute(sql, (

account_id,

external_ref_id,

timestamp,

'bingo',

300)

)

self.connection.commit()

def close_connection(self):

'''

Closes connection to MySQL

'''

self.connection.close()

def get_data_from_kinesis_object(obj):

'''

Retrieves data from kinesis event

'''

return obj['kinesis']['data']

def decode_data(data):

'''

Decodes record via base64

'''

return base64.b64decode(data)

def split_records_into_record(records):

'''

Splits a record of records into an array of records

'''

return records.split('\n')

def parse_record(record):

'''

parses record into JSON

'''

if record:

return json.loads(record)

def is_record_valid(record):

'''

Check for keys in event

returns True if they all exist

and False if they dont all exist

'''

return all(key in record for key in (

'eventName',

'sourceType',

'AccountId',

'Timestamp',

'ExternalReferenceId'

))

def handler(event, context):

"""

This function inserts data into Aurora RDS instance

"""

mysql = MYSQL(RDS_HOST, DB_USER, DB_PASSWORD, DB_NAME, DB_TABLE)

for obj in event['Records']:

records = decode_data(get_data_from_kinesis_object(obj))

split_records = split_records_into_record(records)

for record in split_records:

parsed_record = parse_record(record)

if is_record_valid(parsed_record):

mysql.execute(

parsed_record['AccountId'],

parsed_record['ExternalReferenceId'],

str(parsed_record['Timestamp'])

)

mysql.close_connection()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值