问题描述
环境:
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 (将#修改为@)