【问题标题】:connect a json file data to mysql database (empty table)将一个json文件数据连接到mysql数据库(空表)
【发布时间】:2021-06-02 17:29:48
【问题描述】:

我是 python 的初学者,尝试使用我的程序中加载的 json 文件将 access 数据库连接到 python,以便我可以阅读它并最终分析它的某些内容。但我无法连接到它并尝试了不同的方法仍然得到相同的错误。

 import mysql.connector
import json

# create the key
from mysql.connector import cursor

mydb = mysql.connector.connect(host='localhost', port='3306', user='root', password='nihad147', database='tweets')
mycursor = mydb.cursor()

sql_tweet = """INSERT INTO tweet (  tweet_id,
                                    id_user,
                                    text,
                                    tweet_location,
                                    created_at,
                                    name_screen,
                                    categorie_id,
                                    )
                                    VALUES (%s,%s,%s,%s,%s,%s,%s)"""

sql_user = """INSERT INTO tweetuser (
                                        id_user,
                                        name_screen,
                                        location_user,
                                        count_followers,
                                        friends_count,
                                        statuse_count) 
                                        VALUES (%s,%s,%s,%s,%s,%s)"""
sql_location = """"insert into tweet_location (
                            
                                         location_id,
                                         latitude,
                                         longitude
                                          tweet_id
                                        VALUES(%s,%s,%s,%s)"""
myJsonFile = open('tweets.json', encoding="utf-8")
mycursor.execute("DELETE FROM tweet")
mycursor.execute("DELETE FROM tweetuser")
mycursor.execute("DELETE FROM tweet_location")
c = 0
for line in myJsonFile:
    c = c + 1
    print("tweet number ", c, " is uploading to the server")
    data = json.loads(line)
    # insert into tweet
    val_tweet = (
    data['tweet_id'], data['user_id_str'], data['raw_text'],data['location']['address']['city'],data['date'], data['user_screen_name'])

    mycursor.execute(sql_tweet,sql_location, val_tweet)

    mydb.commit()


    # testing ifthe user already exist
    user = "SELECT * FROM tweetuser WHERE id_user = '" + str(data['user_id_str']) + "'"
    mycursor.execute(user)

    myresult = mycursor.fetchall()

    row_count = mycursor.rowcount
    if row_count == 0:

        val_user = (data['user_id_str'], data['user_screen_name'], data['location']['address']['city'],data['user_followers_count'],
                    data['user_friends_count'],  data['user_statuses_count'])

        mycursor.execute(sql_user, val_user)

        mydb.commit()
print('done')

这是一个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 用户的数据类型,它必须是 bigint 而不是 int,因为它是一个大数据。 我将我的 jsonfile 连接到我的数据库没有问题,但它只插入到 tweetuser 表中,但没有插入到 tweet 表中。 推文表是空的。

如果有任何帮助,我将不胜感激,谢谢

【问题讨论】:

    标签: python mysql database connection


    【解决方案1】:

    错误

    mysql.connector.errors.DataError: 1264 (22003): Out of range value for column 'id_user' at row 1
    

    表明您尝试用作 id_user 的值在数值上太大。

    由于您尚未发布表定义,我猜您正在使用 MEDIUMINTSMALLINTTINYINTid_user 并且您尝试写入数据库的实际用户 ID 也是对于该数据类型来说很大。

    在您的示例中,user_id_str706377881,但是,MEDIUMINT 的最大值分别是 838860716777215(无符号)。

    检查表定义中的数据类型。

    【讨论】:

    • 不客气。不胜感激。
    • 如果你能发布到底是什么问题以及解决了什么问题,那就太好了
    【解决方案2】:

    您正在连接到您的数据库,这不是问题。 问题是您尝试插入的用户 ID 的长度超过了 MySQL 为该字段的数据类型所允许的最大值。有关您的错误的更多信息,请参阅 herehere

    【讨论】:

    • 我尝试投票,但收到以下消息:感谢您的反馈!您需要至少 15 声望才能投票,但您的反馈已被记录。
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    相关资源
    最近更新 更多