当某些值为空时,如何使用Python在Mysql表中插入行?

2024-04-19 16:13:21 发布

您现在位置:Python中文网/ 问答频道 /正文

环境:

视窗10 Python 3.7

我正在制作一些Python方法来同步本地SQLITE3表和远程MYSQL表

我正在用Python开发软件。软件将用户的工作保存在本地SQLITE3表“contacts”上

[MYSQL表_联系人]

  • id整数自动递增主键
  • id_行
  • 我是你的客户
  • 等等

[SQLITE3联系人]

  • id整数自动递增主键
  • 等等

有时,来自表contacts的这些数据“正在插入到我们的MYSQL主表“table_contacts”中。由于所有用户都在MYSQL DB中插入他们的行,MYSQL表的“id”autoincrement作为主键,“id_row”是来自SQLITE3 contacts表的“id”

通过这种方式,MYSQL主表_contacts拥有来自所有用户的所有本地表“contacts”的所有行,我们可以通过id_row&id_client找到一行用户

我的代码是这样工作的:

1rst-标识用户N°p_用户id的最后一个id_行 第二,它获取所有本地SQLite行,其中id>;最后一行(我们得到需要插入到远程MySQL表中的本地行) 第三,我们循环新的联系人行(SQLITE3),并将其值插入MYSQL表_contacts中

这是我的代码:

p_user_id=40
# 1rst - We identify the last id_row on remote Mysql DB
sql_get_last_row_contacts=f"SELECT id_row FROM table_contacts WHERE id_client={p_user_id} ORDER BY id_row DESC LIMIT 1;"
mysql_cursor.execute(sql_get_last_row_contacts)
last_id_row_dico_contact=mysql_cursor.fetchone()
last_id_row=last_id_row_dico_contact['id_row']


# 2nd - We get all the new rows from local SQLITE3 DB
sql_get_all_new_rows_contacts=f"SELECT id,platform,type,username,business_name,  \
        first_name,last_name,address,zip ,city,state,country ,email,email_perso,email_pro,phone,  \
        website,url_profile,followed,unfollowed,insta_header_full_name,insta_header_biz_category,  \
        insta_bio,insta_website,twitter,url_facebook ,url_linkedin ,facebook_headline,  \
        facebook_headline_group,twitter_bio,linkedin_bio ,url_twitter,job ,gender,instagram,  \
        facebook_group , pinterest,business_category,google_reviews,source, id_task_user,  \
        replied,replied_invitation FROM contacts WHERE id >{last_id_row}"
data_contacts=sqlitecursor.execute(sql_get_all_new_rows_contacts).fetchall()


# 3rd - WE CAN LOOP THE data_contacts FROM SQLITE AND INSERT THE NEW ROWS In mysql table
if data_contacts:
    for data_contact in data_contacts:        
        sql_test_if_exist_contact = "SELECT * FROM table_actions WHERE id_client=" + str(p_user_id) + " AND id_row=" + str(data_contact[0])
        #print(f"sql_test_if_exist_contact : {sql_test_if_exist_contact}")
        mysql_cursor.execute(sql_test_if_exist_contact)
        if not mysql_cursor.fetchone():

            sql_insert_row_contacts = """INSERT INTO table_contacts (id_client, id_row,platform, type,username,business_name,first_name,last_name ,address ,zip, city ,state,country ,email,email_perso,  \
                                            email_pro,phone,website ,url_profile,followed,unfollowed,insta_header_full_name ,insta_header_biz_category,  \
                                            insta_bio,insta_website,twitter ,url_facebook ,url_linkedin ,facebook_headline,facebook_headline_group,  \
                                            twitter_bio,linkedin_bio ,url_twitter,job, gender, instagram, facebook_group, pinterest, business_category,  \
                                            google_reviews, source, id_task_user, replied, replied_invitation) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
                            
            args_insert_row_contact = (p_user_id,data_contact[0], data_contact[1], data_contact[2],  \
            data_contact[3], data_contact[4], data_contact[5],data_contact[6], data_contact[7],  \
            data_contact[8], data_contact[9], data_contact[10], data_contact[11],  \
            data_contact[12], data_contact[13], data_contact[14], data_contact[15],  \
            data_contact[16],  data_contact[17], data_contact[18], data_contact[19],  \
            data_contact[20],
                            data_contact[21],
                            data_contact[22],
                            data_contact[23],
                            data_contact[24],
                            data_contact[25],
                            data_contact[26],
                            data_contact[27],
                            data_contact[28],
                            data_contact[29],
                            data_contact[30],
                            data_contact[31],
                            data_contact[32],
                            data_contact[33],
                            data_contact[34],
                            data_contact[35],
                            data_contact[36],
                            data_contact[37],
                            data_contact[38],
                            data_contact[39],
                            data_contact[40],
                            data_contact[41])
            print(f"sql_insert_row_contacts : {sql_insert_row_contacts}")
            print(f"args_insert_row_contact : {args_insert_row_contact}")
            mysql_cursor.execute(sql_insert_row_contacts,args_insert_row_contact)
            mysql_connection.commit()

问题:

当我运行代码时,我得到以下输出:

sql_insert_row_contacts : INSERT INTO table_contacts (id_client, id_row,platform, type,username,business_name,first_name,last_name ,address ,zip, city ,state,country ,email,email_perso,                                              email_pro,phone,website ,url_profile,followed,unfollowed,insta_header_full_name ,insta_header_biz_category,                                              insta_bio,insta_website,twitter ,url_facebook ,url_linkedin ,facebook_headline,facebook_headline_group,                                              twitter_bio,linkedin_bio ,url_twitter,job, gender, instagram, facebook_group, pinterest, business_category,                                              google_reviews, source, id_task_user, replied, replied_invitation) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
args_insert_row_contact : (40, 2148, 'instagram', None, 'kurdamax', None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, 'clementpellerin', None, None)
Traceback (most recent call last):
  File "test3.py", line 173, in <module>
    mysql_cursor.execute(sql_insert_row_contacts,args_insert_row_contact)
  File "C:\Users\Nino\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\cursor.py", line 551, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Users\Nino\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\connection.py", line 490, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Users\Nino\AppData\Local\Programs\Python\Python37\lib\site-packages\mysql\connector\connection.py", line 395, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.DataError: 1136 (21S01): Column count doesn't match value count at row 1

当我计算每一列和每一个值时,我怀疑是“无”值造成了“计数”问题。但我可能错了。你怎么看