微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用python将数据插入到mysql表中

如何解决使用python将数据插入到mysql表中

我是 python 语言的初学者,我尝试使用 python 将我的 json 文件数据插入到我的数据库表中,但问题是我没有错误

推文号 49634 正在上传到服务器

我不明白问题出在哪里,请帮忙

import MysqL.connector
import json

mydb = MysqL.connector.connect(host='localhost',port='3306',user='root',password='nihad147',database='tweets')
mycursor = mydb.cursor()
sql_request='insert ignore into tweet_location (latitude,longitude,tweet_id) values (%s,%s,%s)'""

myJsonFile = open('tweet.json',encoding="utf-8")
c = 0



for line in myJsonFile:
  c = c + 1
print("tweet number ",c," is uploading to the server")
data = json.loads(line)
#line = line.replace('','')

tweet = "SELECT * FROM tweet WHERE tweet_id = '" + str(data['tweet_id']) + "'"
mycursor.execute(tweet)

myresult = mycursor.fetchall()

row_count = mycursor.rowcount
if row_count == 0:
 if 'location' in data.keys() and data['location'] != None and 'address' in data['location']:
  latitude = data ['location']['lat']
  longitude=data ['location']['lon']


mycursor.execute(sql_request,(latitude,data['tweet_id']))
print ('------------')


mydb.commit ()

这是我的 json 文件数据的示例:

{"tweet_id":"1261276320878788609","date":"Fri May 15 12:44:42 +0000 2020","raw_text":"برنامج وطني لدعم المبدعين في مواجهة #كورو"
"geo_source":"user_location","location":{"address":
{"country":"Tunisia","country_code":"tn","state_district":"غزالة","county":"العرب","state":"Bizerte"},"response":
"{'place_id': 235309103,'licence': 'Data © OpenStreetMap contributors,ODbL 1.0. https://osm.org/copyright','osm_type': 'relation','osm_id': 7124228,'boundingBox': ['37.105957','37.2033466','9.4739053','9.6124953'],'lat': '37.1551868','lon': '9.54834183807249','display_name': 'العرب,غزالة,Bizerte,Tunisia','class': 'boundary','type': 'administrative','importance': 0.45,'icon': '/data/nominatimimages/mapicons/poi_boundary_administrative.p.20.png','address':{'county': 'العرب','state_district': 'غزالة','state': 'Bizerte','country': 'Tunisia','country_code': 'tn'}}","geohash":"snwg37buskzd","query_term":"arab","lon":9.54834183807249,"lat":37.1551868},"user_friends_count":61,"user_description":"I love UAE and his great leadership","user_created_at":"Wed Oct 09 11:41:41 +0000 2013","user_screen_name":"SikandarMirani","user_id_str":"706377881","user_verified":false,"user_statuses_count":50804,"user_followers_count":946,"user_location":"dubai United arab Emirates"}

这是我表的属性推文: 推特_id, 用户名, 文本, 推特位置, created_at,name_screen,category_id,

解决方法

不要一次读取一行 JSON 文件。使用 json.load() 将整个文件加载到字典中。

在选择推文的查询中使用参数,而不是将 data['tweet_id'] 连接到 SQL 中。

插入新行的代码应该在所有从数据中设置 iflatitudelongitude 语句中。实际上,您不妨将所有数据库代码放在检查 if 中是否设置了 locationJSON 语句中。

import mysql.connector
import json

mydb = mysql.connector.connect(host='localhost',port='3306',user='root',password='nihad147',database='tweets')
mycursor = mydb.cursor()
sql_request='insert ignore into tweet_location (latitude,longitude,tweet_id) values (%s,%s,%s)'""

with open('tweet.json',encoding="utf-8") as myJsonFile:
    data = json.load(myJsonFile)

if data.get('location') and 'address' in data['location']:
    tweet = "SELECT 1 FROM tweet WHERE tweet_id = %s"
    mycursor.execute(tweet,(data['tweet_id'],))
    myresult = mycursor.fetchall()

    row_count = len(myresult)
    if row_count == 0:
        print(f"Inserting {data['tweet_id']} to the database");
        latitude = data['location']['lat']
        longitude = data['location']['lon']
        mycursor.execute(sql_request,(latitude,data['tweet_id']))
        mydb.commit ()
        print ('------------')
    else:
        print(f"Tweet {data['tweet_id']} is already in the database")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。