python - Python Mysql 调用静默失败(MariaDB)
问题描述
试图弄清楚 Mysql Insert 语句期间发生了什么。我有一个正在编写的实用程序,正在尝试打开我的数据库(Mysql 中的 Django 数据库)并将另一个数据库中的记录添加到其中。我想我包含了它需要的所有字段,如果我真的剪切并粘贴了生成的插入语句 - 它可以工作。
但是,它不能以编程方式工作。它似乎不会产生错误。最后一个插入行似乎表明成功,但实际记录永远不会到达那里(我认为它出于某种原因正在回滚)。只是看不出问题是什么。在此之前,我成功地使用相同的游标检查了同一个数据库中的其他内容,所以游标应该是好的。
下面是python中的插入代码。
create_string = """Insert INTO trackx_site_program
SET air_date = '%s',
air_time = '%s',
service = '%s',
block_time = '%s',
block_time_delta = %d,
running_time = '%s',
running_time_delta = %d,
remaining_time = '%s',
remaining_time_delta = %d,
title = '%s',
locked_flag = %d,
deleted_flag = %d,
library = '%s',
mc = '%s',
producer = '%s',
editor = '%s',
remarks = '%s',
audit_time = '%s',
audit_user = 'todd' """ % (
air_date, air_time, service_name, block_time, block_time_delta,
running_time, running_time_delta, remaining_time, remaining_time_delta,
title, locked_flag, deleted_flag, library, mc, producer, editor,
remarks, audit_time)
print(" Create String = \n %s" % create_string)
num_rows = new_trackx_cursor.execute(create_string)
print ("Num_rows from execute = %s" % num_rows)
new_program_id = new_trackx_cursor.lastrowid
print("Last Row ID Inserted was %s " % new_program_id)
new_trackx_cursor.close()
sys.exit("Exiting after insert")
字符串示例如下:
Create String =
Insert INTO trackx_site_program
SET air_date = '2001-06-13',
air_time = '18:00:00',
service = 'TheService',
block_time = '0:57:00',
block_time_delta = 3420000000,
running_time = '00:00:00',
running_time_delta = 0,
remaining_time = '0:57:00',
remaining_time_delta = 3420000000,
title = 'My061301',
locked_flag = 1,
deleted_flag = 0,
library = 'K061301-PM',
mc = 'ToddS',
producer = 'TheProducer',
editor = 'theEditor',
remarks = 'REGULAR PROGRAM',
audit_time = '2001-06-13 10:55:16',
audit_user = 'toadyb'
Num_rows from execute = 1
Last Row ID Inserted was 22
Exiting after insert
实际数据库表如下所示:
desc tracks_site_program;
+----------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| air_date | date | NO | | NULL | |
| air_time | time(6) | NO | | NULL | |
| service | varchar(10) | NO | | NULL | |
| block_time | time(6) | NO | | NULL | |
| block_time_delta | bigint(20) | NO | | NULL | |
| running_time | time(6) | NO | | NULL | |
| running_time_delta | bigint(20) | NO | | NULL | |
| remaining_time | time(6) | NO | | NULL | |
| remaining_time_delta | bigint(20) | NO | | NULL | |
| title | varchar(190) | NO | | NULL | |
| locked_flag | tinyint(1) | NO | | NULL | |
| locked_expiration | datetime(6) | YES | | NULL | |
| deleted_flag | tinyint(1) | NO | | NULL | |
| library | varchar(190) | YES | | NULL | |
| mc | varchar(64) | NO | | NULL | |
| producer | varchar(64) | NO | | NULL | |
| editor | varchar(64) | NO | | NULL | |
| remarks | longtext | YES | | NULL | |
| audit_time | datetime(6) | NO | | NULL | |
| audit_user | varchar(32) | YES | | NULL | |
+----------------------+--------------+------+-----+---------+----------------+
21 rows in set (0.00 sec)
如您所见,我打印出实际的字符串,如果我剪切并粘贴到 mysql 会话中,它就可以正常工作。
有人知道这里给出了什么吗?我缺少一个步骤吗?谢谢
解决方案
不太清楚为什么,但我在 Python 中的连接都以 autocommit=0 (False) 开头,所以我的事务自动回滚。插入后我对数据库连接句柄进行了提交,事务成功完成。
推荐阅读
- c# -
在服务器上上传代码时不起作用 - java - 如何在运行时更改属性文件和刷新配置类?
- java - Spring蛇案例和验证错误响应
- python - jupyder notebook: OSError: [Errno 2] "dot" not found in path
- sas - SAS PROC SQL - 如何将字符串转换为数字
- php - Ajax 无法使用 GET 向 php 发送数据
- amazon-web-services - 在 Glue 作业中创建 Glue 数据目录表
- entity-framework-core - 即使属性类型不可为空,是否可以将数据库列配置为允许 NULL?
- javascript - 如何在 JavaScript 中保存网站以供离线使用
- php - PHP:如何下载 gzip 压缩的内容?