compare我在 Pandas 文档中找到了该函数:
pandas.DataFrame.compare
DataFrame.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
Run Code Online (Sandbox Code Playgroud)
def New_names(self, df_old, df_new):
#New records for insert
df_old_names = set(df_old['name'])
df_new_names = set(df_new['name'])
difference = df_new_names - df_old_names
coincidence = df_old_names - difference
exit_insert = df_new[df_new['name'].isin(difference)]
#Check old records
df_old_names_restrict = df_old[df_new.columns]
exit_update = df_new.compare(df_old_names_restrict)
return (exit_insert, exit_update)
Run Code Online (Sandbox Code Playgroud)
但它会引发以下错误:
Traceback (most recent call last): File
"C:/Users/shulya403/Shulya403_works/all_gid_2/Database/db_insert_pd.py",
line 203, in <module>
FillDB.Pruducts_to_SQL(df_new=FillDB.df_Products.head(20)) File "C:/Users/shulya403/Shulya403_works/all_gid_2/Database/db_insert_pd.py",
line 184, in Pruducts_to_SQL
df_select = self.New_names(self.Select_SQL_Products(), df_new)[0] File
"C:/Users/shulya403/Shulya403_works/all_gid_2/Database/db_insert_pd.py",
line 175, in New_names
exit_update = …Run Code Online (Sandbox Code Playgroud) 我将 Python.SQLAlchemy 与 MySQL 数据库一起使用。所有代码都适用于数据中的拉丁符号,但不适用于西里尔文:
UnicodeEncodeError: 'charmap' 编解码器无法对位置 0-17 中的字符进行编码:字符映射到
我在引擎构造函数中添加了“encoding='utf8', convert_unicode=True”但没有什么可改变的
MySQL 中表的字符集/排序规则:utf8 / utf8-bin
代码:
def DB_alchemy(self, category, db="mysql://user:pass@localhost/all_gid_2"):
self.sql_engine = sql.create_engine(db, echo=True, encoding='utf8', convert_unicode=True)
metadata = sql.MetaData(self.sql_engine)
sql_tbl_name_products = category+'_products'
sql_tbl_name_class = category + '_classes'
self.tbl_products = sql.Table(sql_tbl_name_products, metadata, autoload=True)
self.tbl_classes = sql.Table(sql_tbl_name_class, metadata, autoload=True)
self.connection = self.sql_engine.connect()
Run Code Online (Sandbox Code Playgroud)
....
def Insert_df_to_SQL(self, df, tbl):
dict_insert = df.to_dict(orient='records')
insert_qry = tbl.insert()
self.connection.execute(insert_qry, dict_insert)
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 引擎在西里尔数据中的回显:
2020-08-02 22:07:05,839 INFO sqlalchemy.engine.base.Engine INSERT INTO
Nb_classes(类型、class_subtype、文本、解释、名称)值(%s、%s、%s、%s、%s)2020- 08-02 22:07:05,840 信息 sqlalchemy.engine.base.Engine …