我正在leetcode上练习SQL(例如,
https://leetcode.com/problems/game-play-analysis-ii/
)并希望在本地复制失败的测试用例。leetcode为JSON提供了每个测试用例的表值,我希望将这些测试用例以编程方式转换为
INSERT INTO
声明。
我创造了一个
Activity2
表
mydatabase
有四列,
player_id
,
device_id
,
event_date
和
games_played
:
mysql> DESCRIBE Activity2;
+--------------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------+------+-----+---------+-------+
| player_id | int(11) | YES | | NULL | |
| device_id | int(11) | YES | | NULL | |
| event_date | date | YES | | NULL | |
| games_played | int(11) | YES | | NULL | |
+--------------+---------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM Activity2;
Empty set (0.00 sec)
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| mydatabase |
+------------+
1 row in set (0.00 sec)
然后我尝试运行以下脚本(运行之后
pip install mysql-connector-python
):
import json
import mysql.connector
connection = mysql.connector.connect(
user='myuser',
password='mypassword',
host='127.0.0.1',
database='mydatabase',
port=3306)
cursor = connection.cursor()
with open('game_play_analysis_testcase.json') as fp:
data = json.load(fp)
for player_id, device_id, event_date, games_played in data['rows']['Activity']:
query = \
f"""
INSERT INTO Activity2 (player_id, device_id, event_date, games_played)
VALUES ({player_id}, {device_id}, {event_date!r}, {games_played});
"""
print(query)
try:
cursor.execute(query)
except mysql.connector.Error as err:
print(err.msg)
cursor.close()
connection.close()
JSON文件的结构是这样的:例如,
print
语句生成以下(部分)输出:
INSERT INTO Activity2 (player_id, device_id, event_date, games_played)
VALUES (85, 99, '2019-02-27', 45);
INSERT INTO Activity2 (player_id, device_id, event_date, games_played)
VALUES (78, 34, '2019-01-16', 87);
INSERT INTO Activity2 (player_id, device_id, event_date, games_played)
VALUES (58, 31, '2019-02-25', 52);
问题是如果我运行这个脚本,我会发现
活动2
之后桌子还是空的。
我认为由于没有错误被提出/打印,这应该是有效的。我确信我使用的凭证是正确的。知道为什么这不起作用吗?