json数据导入mysql只能导入1行,随后报错

weixin_40101242 2018-08-31 09:59:50
这是代码
import json
import pymysql

def prem(db):
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print("Database version : %s " % data) # 结果表明已经连接成功
cursor.execute("DROP TABLE IF EXISTS pmdb") # 习惯性
sql = """CREATE TABLE pmdb (
pm10 FLOAT,
pm25 FLOAT,
time varchar(100)
)"""
cursor.execute(sql) # 根据需要创建一个表格


def pmdata_insert(db):

with open('/var/www/html/aqi2.json', encoding='utf-8') as f:
i = 0
while True:
i += 1
print(u'正在载入第%s行......' % i)
try:
lines = f.readline() # 使用逐行读取的方法
pm_text = json.loads(lines) # 解析每一行数据
result = []
result.append((pm_text[i-1]['pm10'], pm_text[i-1]['pm25'],pm_text[i-1]['time']))
print(result)
inesrt_re = "insert into pmdb(pm10,pm25,time) values (%s, %s, %s)"
cursor = db.cursor()
cursor.executemany(inesrt_re, result)
db.commit()
except Exception as e:
db.rollback()
print(str(e))
break


if __name__ == "__main__": # 起到一个初始化或者调用函数的作用
db = pymysql.connect("localhost", "root", "trafficlab507-1", "sensordb", charset='utf8')
cursor = db.cursor()
prem(db)
pmdata_insert(db)
cursor.close()

报错内容为:
Database version : 10.1.23-MariaDB-9+deb9u1
正在载入第1行......
[(7.5, 5.1, '30.08.2018 21:14:42')]
正在载入第2行......
Expecting value: line 1 column 1 (char 0)

json数据格式为:[{"pm10": 7.5, "pm25": 5.1, "time": "30.08.2018 21:14:42"}, {"pm25": 5.2, "pm10": 6.4, "time": "30.08.2018 21:16:13"}, {"pm10": 18.0, "pm25": 11.8, "time": "31.08.2018 09:28:17"}]

...全文
982 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40101242 2018-09-05
  • 打赏
  • 举报
回复
引用 14 楼 csbinchina 的回复:
将pmdata_insert函数改为如下即可:

def pmdata_insert(db):
with open('1.json', encoding='utf-8') as f:
lines = f.readline() # 使用逐行读取的方法
pm_text = json.loads(lines) # 解析每一行数据
for i in range(len(pm_text)):
print(u'正在载入第%s行......' % i)
try:
result = []
result.append((pm_text[i]['pm10'], pm_text[i]['pm25'], pm_text[i]['time']))
print(result)
inesrt_re = "insert into pmdb(pm10,pm25,time) values (%s, %s, %s)"
cursor = db.cursor()
cursor.executemany(inesrt_re, result)
db.commit()
except Exception as e:
db.rollback()
print(str(e))
break

太完美了,非常感谢大神。
csbinchina 2018-09-02
  • 打赏
  • 举报
回复
将pmdata_insert函数改为如下即可:

def pmdata_insert(db):
with open('1.json', encoding='utf-8') as f:
lines = f.readline() # 使用逐行读取的方法
pm_text = json.loads(lines) # 解析每一行数据
for i in range(len(pm_text)):
print(u'正在载入第%s行......' % i)
try:
result = []
result.append((pm_text[i]['pm10'], pm_text[i]['pm25'], pm_text[i]['time']))
print(result)
inesrt_re = "insert into pmdb(pm10,pm25,time) values (%s, %s, %s)"
cursor = db.cursor()
cursor.executemany(inesrt_re, result)
db.commit()
except Exception as e:
db.rollback()
print(str(e))
break


ErWone 2018-09-02
  • 打赏
  • 举报
回复
兄弟你的循环写的不对,你循环第二次的时候你又把i赋值为0了,在while的时候i就是1,每次循环回来都是这样
weixin_43115661 2018-09-02
  • 打赏
  • 举报
回复
result 是不是append了,第二行读取的时候,是不是要
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
谢谢各位了。
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
求助各位大神。
wudamen 2018-08-31
  • 打赏
  • 举报
回复
https://www.cnblogs.com/miqi1992/p/8081244.html
wudamen 2018-08-31
  • 打赏
  • 举报
回复

<a href="https://www.cnblogs.com/miqi1992/p/8081244.html">数据提取之JSON与JsonPATH</a>
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
引用 10 楼 wudamen 的回复:
要么就直接用jsonpath提取出json数据,遍历写入,这样可以减少不必要的麻烦,出问题的时候调试依次调试,问题总是能解决的

jsonpath,网上查了一下资料挺少,不太懂,大神有相应的例子吗?

wudamen 2018-08-31
  • 打赏
  • 举报
回复
要么就直接用jsonpath提取出json数据,遍历写入,这样可以减少不必要的麻烦,出问题的时候调试依次调试,问题总是能解决的
wudamen 2018-08-31
  • 打赏
  • 举报
回复

pm_text = json.loads(lines) # 你这里取出的数据是[{"pm10": 7.5, "pm25": 5.1, "time": "30.08.2018 21:14:42"}, {"pm25": 5.2, "pm10": 6.4, "time": "30.08.2018 21:16:13"}, {"pm10": 18.0, "pm25": 11.8, "time": "31.08.2018 09:28:17"}]

result.append((pm_text[i-1]['pm10'], pm_text[i-1]['pm25'],pm_text[i-1]['time'])) # 你这里又一直取的是第一个下标的数据,当然会出现问题
result.append((pm_text[i]['pm10'], pm_text[i]['pm25'],pm_text[i]['time'])) # 可以试一下
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
引用 7 楼 oyljerry 的回复:
result 是不是append了,第二行读取的时候,是不是要清空

对,append了,第二行读取的时候怎么清空? result = []?
oyljerry 2018-08-31
  • 打赏
  • 举报
回复
result 是不是append了,第二行读取的时候,是不是要清空
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
引用 5 楼 wudamen 的回复:

sql = """CREATE TABLE pmdb (
id int unsigned auto_increment primary key not null,
pm10 FLOAT,
pm25 FLOAT,
time varchar(100)
)"""
创建以后还是报错
Database version : 10.1.23-MariaDB-9+deb9u1
正在载入第1行......
[(7.5, 5.1, '30.08.2018 21:14:42')]
正在载入第2行......
Expecting value: line 1 column 1 (char 0)
wudamen 2018-08-31
  • 打赏
  • 举报
回复

sql = """CREATE TABLE pmdb (
id int unsigned auto_increment primary key not null,
pm10 FLOAT,
pm25 FLOAT,
time varchar(100)
)"""
wudamen 2018-08-31
  • 打赏
  • 举报
回复
你创建的表没有主键索引????
weixin_40101242 2018-08-31
  • 打赏
  • 举报
回复
大神大神在哪里?

37,722

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧