我写了下面的代码来生成一些测试数据。该脚本无法将数据插入数据库。然而,将生成的 SQL 打印到控制台并将其复制粘贴到 mysql 中会插入记录,这是为什么?
首先,这是 SQLfiddle http://sqlfiddle.com/#!9/cf3bfe/1
下面是脚本:
import MySQLdb
from datetime import *
import random
db1=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
db2=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
get_participant=db1.cursor()
insert_test=db2.cursor()
dt = datetime.now()
for y in xrange(0,5):
for x in xrange(0,440):
random_dt = dt + timedelta(minutes=random.randrange(15, 30, 1))
get_participant.execute('''SELECT COUNT(*) FROM Participant WHERE (InternalGroup IS NOT NULL) AND (idParticipant = ''' + str(x + 1) + ''');''')
row = get_participant.fetchone()
if row[0] != 0:
sql2 = 'INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values (\'' + str(random_dt) + '\', \'' + str(x + 1) + '\');'
insert_test.execute(sql2)
print sql2
以下是 print sql2 语句在控制台上打印的一些行。完全按原样复制并粘贴这些行,将数据插入数据库
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:09:46.308746', '243');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:09:46.308746', '244');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:10:46.308746', '245');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:03:46.308746', '255');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:04:46.308746', '266');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 16:58:46.308746', '272');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 16:57:46.308746', '286');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:10:46.308746', '289');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:03:46.308746', '294');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:02:46.308746', '333');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:04:46.308746', '363');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:03:46.308746', '372');
INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values ('2017-10-06 17:05:46.308746', '388');
编辑 1:
我把代码改成了这样:
import MySQLdb
from datetime import *
import random
db1=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
db2=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
get_participant=db1.cursor()
insert_test=db2.cursor()
dt = datetime.now()
for y in xrange(0,5):
for x in xrange(0,439):
xn = x + 1
random_dt = dt + timedelta(minutes=random.randrange(15, 30, 1))
get_participant.execute('''SELECT COUNT(*) FROM Participant WHERE (InternalGroup IS NOT NULL) AND (idParticipant = %s)''', (xn,))
row = get_participant.fetchone()
if (row[0] != 0):
insert_test.execute('''INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values (%s,%s)''', (random_dt, xn))
但是还是没有插入记录。
编辑 2:
在循环内移动游标也没有区别:
db1=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
db2=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
dt = datetime.now()
for y in xrange(0,5):
for x in xrange(0,439):
get_participant = db1.cursor()
insert_test = db2.cursor()
xn = x + 1
random_dt = dt + timedelta(minutes=random.randrange(15, 30, 1))
get_participant.execute('''SELECT COUNT(*) FROM Participant WHERE (InternalGroup IS NOT NULL) AND (idParticipant = %s)''', (xn,))
row = get_participant.fetchone()
if (row[0] != 0):
insert_test.execute('''INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values (%s,%s)''', (random_dt, xn))
编辑 3:
忘记提交数据库,将代码更改为以下,现在一切正常:
import MySQLdb
from datetime import *
import random
db1=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
db2=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
dt = datetime.now()
for y in xrange(0,5):
for x in xrange(0,439):
get_participant = db1.cursor()
insert_test = db2.cursor()
xn = x + 1
random_dt = dt + timedelta(minutes=random.randrange(15, 30, 1))
get_participant.execute('''SELECT COUNT(*) FROM Participant WHERE (InternalGroup IS NOT NULL) AND (idParticipant = %s)''', (xn,))
row = get_participant.fetchone()
if (row[0] != 0):
insert_test.execute('''INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values (%s,%s)''', (random_dt, xn))
db2.commit()
最佳答案
:捂脸
忘记使用 db2.commit()
下面的代码 100% 有效
import MySQLdb
from datetime import *
import random
db1=MySQLdb.connect(host="localhost", user="user", passwd="password", db="racedb_bu")
db2=MySQLdb.connect(host="localhost", user="user", passwd="password",, db="racedb_bu")
dt = datetime.now()
for y in xrange(0,5):
for x in xrange(0,439):
get_participant = db1.cursor()
insert_test = db2.cursor()
xn = x + 1
random_dt = dt + timedelta(minutes=random.randrange(15, 30, 1))
get_participant.execute('''SELECT COUNT(*) FROM Participant WHERE (InternalGroup IS NOT NULL) AND (idParticipant = %s)''', (xn,))
row = get_participant.fetchone()
if (row[0] != 0):
insert_test.execute('''INSERT INTO racedb_bu.TimeEntry (DateTimeStamp, Participant) values (%s,%s)''', (random_dt, xn))
db2.commit()
关于Python-MySQLdb 无法插入值,但运行打印到控制台的 SQL 会插入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46608665/