我仍然无法将mydata插入sql。我已搜索,但找不到解决方案。我读了json文件,并将数据插入到sql db中。 json文件包含多个键/值字典的列表。以下是配置的参数列对于数据库表1
+---------------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------+--------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| log_number | int(10) | YES | | NULL | |
| timestamp | datetime | YES | | NULL | |
| staff_id | varchar(10) | YES | | NULL | |
| staff_name | varchar(30) | YES | | NULL | |
| temp_staff_id | varchar(10) | YES | | NULL | |
| temp_staff_name | varchar(30) | YES | | NULL | |
| staff_department | varchar(20) | YES | | NULL | |
| service_id | varchar(20) | YES | | NULL | |
| service_number | varchar(20) | YES | | NULL | |
| state | varchar(20) | YES | | NULL | |
| city | varchar(20) | YES | | NULL | |
| description | varchar(50) | YES | | NULL | |
| additional_remarks | varchar(100) | YES | | NULL | |
+---------------------------+--------------+------+-----+---------+----------------+
并非所有字典都列出了所有的数据库参数。有些没有“州”和“城市”,有些字典没有“ additional_remarks”。有些则没有“ temp_staff_id”和“ temp_staff_name”。总体而言,数据库中的参数将覆盖需要插入的json文件的键/值数据的不同类型。
下面是需要插入数据库表1的示例数据
{
'log_number': '1',
'timestamp': '2020-01-11 04:23:31',
'staff_id': 'A123',
'staff_name': 'Krill',
'staff_department': 'Sales',
'service_id': '11111',
'service_number': 'BU-11111',
'description': 'This is description1'
},
{
'log_number': '2',
'timestamp': '2020-01-11 07:03:39',
'staff_id': 'A456',
'staff_name': 'James',
'staff_department': 'Graphic',
'service_id': '22222',
'service_number': 'XU-22211',
'State': 'AAA',
'City': 'AAA'
},
{
'log_number': '3',
'timestamp': '2020-01-27 14:29:11',
'temp_staff_id': 'A571',
'temp_staff_name': 'Mary',
'staff_department': 'Engr',
'service_id': '89000',
'service_number': 'SP-89001',
'State': 'BBB',
'City': 'BBB'
},
{
'log_number': '4',
'timestamp': '2020-01-27 15:08:20',
'staff_id': 'A765',
'staff_name': 'Alex',
'staff_department': 'Sales',
'service_id': '09880',
'service_number': 'XU-09880',
'description': 'This is description3333'
}
我正在使用下面的脚本插入数据...我插入了table1中所有可用的键..但出现错误
#Insert the values onto table1 of db.
sql = "INSERT INTO `table1` (`log_number`, `timestamp`, `staff_id`, `staff_name`, `temp_staff_id`, `temp_staff_name`, `staff_department`, `service_id`, `service_number`, `state`, `city`, `description`, `additional_remarks`) VALUES ( %(log_number)s, %(timestamp)s, %(staff_id)s, %(staff_name)s, %(temp_staff_id)s, %(temp_staff_name)s, %(staff_department)s, %(service_id)s, %(service_number)s, %(state)s, %(city)s, %(description)s, %(additional_remarks)s )"
cursor.executemany( sql, mydata['response']['client_log']['data'])
错误...
1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ...
如果每个字典的所有键都相同并且存在并且遵循与db参数完全相同的方式,那么我可以插入数据而没有任何错误。
由于json文件中的字典键集不相同,并且其中一些不存在...因此,我该如何进行数据插入..例如,如果没有州,城市或Additional_remarks仅插入null。当某些关键参数不存在时,我不确定该怎么做。我希望你们能帮助和进一步建议我。谢谢
因此,与其对sql进行硬编码以使其具有每一列,不如对其进行硬编码。您需要动态构建sql语句,以具有所需的列/值。
这可以通过一个简单的循环来完成。