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

问题描述

环境:

Windows 10 Python 3.7

我正在制作一些 Python 方法来同步本地 sqlite3 表与远程 MysqL 表。

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

[MysqL table_contacts]

  • id INTEGER 自增主键
  • id_row,
  • id_client,
  • 等等....

[sqlite3 联系人]

  • id INTEGER 自增主键
  • 等等...

有时,这些来自表contacts的数据会插入到我们的主MysqL表'table_contacts'中。由于所有用户都在MysqL DB中插入他们的行,MysqL表有'id'自动增量作为PRIMARY KEY,和'id_row'是 sqlite3 联系人表中的“id”。

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

我的代码是这样工作的:

1rst - 标识用户 N°p_user_id 的最后一个 id_row 第二 - 它需要所有本地 sqlite 行,其中 id > last_id_row(我们得到需要插入远程 MysqL 表的本地行) 第三 - 我们循环新的联系人行(sqlite3)并将它们的值插入到 MysqL table_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,first_name,\
                                            email_pro,website,\
                                            insta_bio,facebook_headline_group,\
                                            twitter_bio,facebook_group,\
                                            google_reviews,replied,replied_invitation) VALUES(%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,insta_bio,%s)
args_insert_row_contact : (40,2148,'instagram',None,'kurdamax','clementpellerin',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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)