【发布时间】:2021-10-04 13:52:42
【问题描述】:
试图弄清楚在 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 会话中,它就可以正常工作。
有人知道这里有什么吗?我缺少一个步骤吗? 谢谢
【问题讨论】:
-
如果您没有收到错误,并且找不到记录,则表明自动提交已关闭。您可以在 MariaDB 中启用常规日志并检查究竟发送到服务器的内容吗?
-
很奇怪,连接是匿名的(而不是根),并且出于某种原因将自动提交设置为 0。有没有办法以编程方式强制它,或者我需要添加一个开始事务..?
标签: python mysql django mariadb