写入数据后程序查询没结果

问题

l-hoteldb11.h.cn6:3307/zyj_msg, 对于刚写入的数据,查询不到结果
transaction_isolation = REPEATABLE-READ

详情

  1. 先执行数据更新和插入语句, 如下:
    SET autocommit=0
    UPDATE full_zyj_wrapper_log SET feedBack='1',checktime=1427203789488 WHERE hotelSeq='guangzhou_9930' AND codeBase='wiqunarqta2' AND roomID='471701_127488' AND fromDate='2015-03-28'
    INSERT INTO exclude_monitor (codeBase, hotelSeq, roomID, roomName, checkInDate, checkTime, expireTime, status, updateTime) VALUES ('wiqunarqta2','guangzhou_9930','471701_127488','豪华单人间(预留房1
    8:00过时自动关房无效)-豪华单','2015-03-28',1427203789488,1427290189488,'0',(UNIX_TIMESTAMP()+1)*1000) on duplicate key update checkTime=values(`checkTime`),roomName=values(`roomName`),status=values(`status`),expireTime=values(`ex
    pireTime`),updateTime=((UNIX_TIMESTAMP()+1)*1000)
    commit
    
  2. 然后过10秒左右去查询, 如下:
    SELECT id,codeBase,hotelSeq,roomID,roomName,checkInDate,checkTime,expireTime,status FROM exclude_monitor WHERE updateTime>=1427203770091 and updateTime<1427203780091
    
  3. 程序查不到结果, 但是手动去数据库查就能查到结果

排查

  • 怀疑是事务顺序问题
  • 怀疑是语句执行超时问题
  • 打印取出内容
  • 打印当前的事务状态 show variables like 'autocommit'; ,最终定位问题

总结

对于此类问题, 刚开始的时候怀疑SELECT语句包含在事务中,执行了类似下面的逻辑

  1. 线程1, 拿到一个数据库连接, 开启一个事务(autocommit=0), 执行任务,未提交, 就将线程归还到线程池
  2. 线程2, 拿到另一个数据库连接, 开启一个事务, 执行任务, 即INSERT操作,提交后, 将线程归还到线程池
  3. 线程3, 拿到线程1用过的连接, 因为这个事务未提交, 而且是在INSERT之前开启的事务, 所以它来执行查询, 查不到线程2所插入的数据

排查过程中, 开发一直肯定, 语句的事务提交了, SELECT中没有事务, 在此, 用下面这句话"劝说"比较合适
shuai.lou(娄帅) 03-25 15:05:54
一定不要相信自己写的代码和所谓的框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是使用 Python 操作 MySQL 数据库的示例程序: 首先需要安装 mysql-connector-python 库,可以使用 pip 安装: ```python pip install mysql-connector-python ``` 示例代码: ```python import mysql.connector # 连接数据库 cnx = mysql.connector.connect(user='your_username', password='your_password', host='your_host', database='your_database') # 创建游标 cursor = cnx.cursor() # 执行查询 query = 'SELECT * FROM your_table' cursor.execute(query) # 获取查询结果 result = cursor.fetchall() # 处理结果 for row in result: print(row) # 关闭游标和连接 cursor.close() cnx.close() ``` 请根据您的具体情况修改用户名、密码、主机地址、数据库名称和表名。 需要注意的是,默认情况下,MySQL Connector / Python 使用加密连接参数,如果是非加密连接,需要添加一个额外的参数 {'ssl_disabled': True} ```python cnx = mysql.connector.connect(user='your_username', password='your_password', host='your_host', database='your_database', ssl_disabled=True) ``` ### 回答2: 要使用Python编写一个查询数据数据程序,首先需要安装相关的数据库驱动包,例如MySQLdb或者pymysql。然后按照以下步骤进行编程: 1. 导入必要的模块,比如pymysql。 2. 连接数据库,使用pymysql.connect()函数连接数据库,传入数据库的主机名、用户名、密码、数据库名称等参数。 3. 创建游标,使用connection.cursor()函数创建一个游标对象,用于执行SQL语句。 4. 编写SQL查询语句,例如"SELECT * FROM table_name"。 5. 执行SQL查询,使用游标对象的execute()方法执行SQL查询语句。 6. 获取查询结果,使用游标对象的fetchall()方法获取查询结果。 7. 处理查询结果,根据需要进行数据处理和输出。 8. 关闭游标和数据库连接,使用游标对象的close()方法关闭游标,使用connection.close()方法关闭数据库连接。 以下是一个简单的示例代码: ```Python import pymysql # 连接数据库 connection = pymysql.connect(host='localhost', user='root', password='password', database='database_name') # 创建游标 cursor = connection.cursor() # 编写查询语句 sql = "SELECT * FROM table_name" # 执行查询 cursor.execute(sql) # 获取查询结果 results = cursor.fetchall() # 处理查询结果 for row in results: # 根据需要处理每一行数据 print(row) # 关闭游标和数据库连接 cursor.close() connection.close() ``` 以上代码是一个基本的查询数据程序的框架,根据实际情况可以进行更复杂的查询数据处理操作。 ### 回答3: 要使用Python编写一个查询数据数据程序,首先需要安装Python的数据库驱动程序,如pymysql、pyodbc、psycopg2等。接下来,需要连接到数据库,并编写查询语句。 以pymysql为例,以下是一个简单的查询数据数据程序: ```python import pymysql # 连接到数据库 db = pymysql.connect(host='localhost', user='root', password='password', database='mydb') # 使用cursor()方法创建一个游标对象 cursor = db.cursor() # 编写查询语句 sql = "SELECT * FROM mytable" try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: # 根据数据库表的字段名获取对应的数据 id = row[0] name = row[1] age = row[2] # 打印查询结果 print(f"ID: {id}, Name: {name}, Age: {age}") except Exception as e: print(f"查询失败:{e}") # 关闭数据库连接 db.close() ``` 上述程序首先连接到数据库,需要指定数据库的主机名、用户名、密码和数据库名称。然后,创建一个游标对象,在游标对象上执行SQL查询语句,并获取查询结果。通过遍历结果集中的每一行,可以获取每一列的数据,并进行相应的操作。 最后,关闭数据库连接以释放资源。 请根据实际数据库的类型和相应的数据库驱动程序进行调整,以适应您的具体情况。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值