我正在 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);
问题是,如果我运行这个脚本,我发现Activity2
之后表格仍然是空的。
我认为由于没有引发/打印错误,这应该可行。我很确定我使用的凭据是正确的。知道为什么这不起作用吗?
您可能需要在插入后提交。此链接表示 MySQL Python 连接器不会自动提交。
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlconnection-commit.html
也许在使用插入的 for 循环之后执行 connection.commit() 。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句