pymysql 获取插入数据的id - 在插入数据后返回插入数据的id

import requests, json
import math, sys, logging, threading, time, queue
import pymongo, os, base64, datetime, traceback, pymysql
from pymysql.cursors import DictCursor
from apscheduler.schedulers.blocking import BlockingScheduler
from PIL import Image, ExifTags
import matplotlib.image as mpimg
from DBUtils.PooledDB import PooledDB


mutex = threading.Lock()


logger = logging.getLogger('log')
logger.setLevel(logging.DEBUG)

# 调用模块时,如果错误引用,比如多次调用,每次会添加Handler,造成重复日志,这边每次都移除掉所有的handler,后面在重新添加,可以解决这类问题
while logger.hasHandlers():
    for i in logger.handlers:
        logger.removeHandler(i)

# file log
formatter = logging.Formatter('%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
fh = logging.FileHandler(r'sync_znxk_brand_data_pymongo_try_2_optimizer.log', encoding='utf-8')  # 本地测试
# fh = logging.FileHandler(r'/opt/service/log/apilog/sync_znxk_brand_data_pymongo_try_2_optimizer.log', encoding='utf-8')  # TODO 线上配置
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
logger.addHandler(fh)

# console log
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
logger.addHandler(ch)

DATABASE_CONFIG = {
    "test": {
        'user': 'XXX',
        'passwd': '******',
        'host': '127.0.0.1',
        'database': 'XXX',
        'port': 3306
    },
    "skynet_test": {
        'user': 'XXX',
        'passwd': '******',
        'host': '127.0.0.1',
        'database': 'XXX',
        'port': 3306
    }
}


class MultiThreadSyncBrandDatas(object):

    def __init__(self, thread_num=10, database_flag='test', insert_flag=0):
        self.qurl = queue.Queue()
        self.thread_num = thread_num
        self.database_flag = database_flag
        self.insert_flag = insert_flag
        self.myslq_pool = PooledDB(pymysql, thread_num,
                                   host=DATABASE_CONFIG.get(database_flag).get("host"),
                                   user=DATABASE_CONFIG.get(database_flag).get("user"),
                                   passwd=DATABASE_CONFIG.get(database_flag).get("passwd"),
                                   db=DATABASE_CONFIG.get(database_flag).get("database"),
                                   port=DATABASE_CONFIG.get(database_flag).get("port"),
                                   cursorclass=DictCursor)  # thread_num为连接池里的最少连接数,与线程数保持一致


    def execute_select_sql(self, cursor, select_sql):
        """执行myslq查询"""
        try:
            cursor.execute(select_sql)
            result = cursor.fetchall()
            return result
        except:
            raise Exception(traceback.format_exc())


    def run(self):
        try:
            logger.info('****** start run at:{} ******'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
            conn = self.myslq_pool.connection()
            cursor = conn.cursor()
            try:
                cursor.execute(
                    'insert into season_datas(season, status, create_time, update_time) values("{}", "{}", "{}", "{}")'.format('春天'))
                last_id = cursor.lastrowid
                print('%%%%%%%%%%%%%%%%%%%%%%%%%% last_id = {}'.format(last_id))
                cursor.execute('commit;')
            except:
                cursor.execute('rollback;')
                traceback.print_exc()
        except:
            logger.error(traceback.format_exc())
            raise Exception(traceback.format_exc())

    def get_conn(self, host, user, passwd, database, port):
        """链接数据库,创建操作游标对象cursor并返回"""
        db = pymysql.connect(host=host, user=user, passwd=passwd, db=database, port=int(port), cursorclass=DictCursor)
        cursor = db.cursor()
        return db, cursor


def main(thread_num, database_flag, insert_flag, once_handle_count):
    """"""
    s_t = time.time()
    try:
        my_multi_thread = MultiThreadSyncBrandDatas(thread_num=thread_num, database_flag=database_flag, insert_flag=insert_flag, once_handle_count=once_handle_count)
        my_multi_thread.run()
    except:
        logger.error(traceback.format_exc())
    logger.info('****** all task consum time = {}秒  约合 = {}分钟'.format(time.time()-s_t, math.ceil((time.time()-s_t)/60)))


if __name__ == "__main__":
    #
    logger.info('****** start ******* = {}'.format(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
    thread_num = 10
    once_handle_count = 1000

    database_flag = 'skynet_test'  # 配置数据库
    insert_flag = 1  # 是否入库 0-不入库 1-入库
    main(thread_num, database_flag, insert_flag, once_handle_count)

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在pymysql模块中,可以使用cursor对象的lastrowid属性来获取最后插入的行的id。例如: ``` import pymysql conn = pymysql.connect(host='localhost', user='root', password='123456', database='testdb') cursor = conn.cursor() sql = "INSERT INTO users (name, age) VALUES ('John', 25)" cursor.execute(sql) # 获取插入id last_id = cursor.lastrowid print(last_id) conn.commit() cursor.close() conn.close() ``` 在上面的例子中,我们先执行了一条insert语句,然后通过cursor对象的lastrowid属性获取插入id。注意,获取插入id的前提是在执行insert语句之前开启了一个连接,并且在执行完insert语句后进行了commit操作。 ### 回答2: 在pymysql模块中,执行insert语句后,可以使用`lastrowid`属性来获取插入数据id。 首先,我们需要建立数据库连接,并创建一个游标对象。然后,使用游标对象执行insert语句,例如: ```python # 导入pymysql模块 import pymysql # 建立数据库连接 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 sql = "INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2')" cursor.execute(sql) # 获取插入数据id insert_id = cursor.lastrowid # 提交事务 conn.commit() # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print("插入数据id为:", insert_id) ``` 在执行`cursor.lastrowid`时,会返回最后插入数据的自增id。 需要注意的是,使用`cursor.lastrowid`方法只能在插入数据之后调用,如果在执行insert语句之前调用该方法,它将返回0。另外,使用`lastrowid`属性的前提是表中有自增id字段,且该字段的值为自增。如果表中没有自增id字段,则`lastrowid`方法将返回0。 以上是通过pymysql模块执行insert返回插入数据id的方法。 ### 回答3: 在pymysql模块中,执行insert语句后获取插入数据id可以通过两种方式实现。 第一种方式是使用"SELECT LAST_INSERT_ID()"语句查询最后插入数据id。具体步骤如下: 1. 执行insert语句,插入数据数据库。 2. 使用cursor对象的execute()方法执行"SELECT LAST_INSERT_ID()"语句。 3. 使用cursor对象的fetchone()方法获取查询结果。 4. 最后插入数据id就可以通过查询结果获得。 示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ("value1", "value2")) # 查询最后插入数据id cursor.execute("SELECT LAST_INSERT_ID()") result = cursor.fetchone() inserted_id = result[0] # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print(inserted_id) ``` 第二种方式是使用pymysql的connection对象的insert_id属性获取最后插入数据id。具体步骤如下: 1. 执行insert语句,插入数据数据库。 2. 使用connection对象的insert_id属性获取最后插入数据id。 示例代码如下: ```python import pymysql # 连接数据库 conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb') # 创建游标对象 cursor = conn.cursor() # 执行insert语句 cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ("value1", "value2")) # 获取最后插入数据id inserted_id = conn.insert_id() # 关闭游标和数据库连接 cursor.close() conn.close() # 输出插入数据id print(inserted_id) ``` 无论使用哪种方式,都需要在执行insert语句之后立即获取插入数据id,才能获得正确的结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值