This user's question is also on bitbucket where I've summarized what is likely going on, so we can avoid doing the same work twice here: https://bitbucket.org/zzzeek/sqlalchemy/issues/4085/warning-1366-incorrect-string-value#comment-47394537
On Wed, Aug 22, 2018 at 6:20 AM, Simon King <si...@simonking.org.uk> wrote: > According to https://dev.mysql.com/doc/refman/5.7/en/variables-table.html, > VARIABLE_VALUE is a column in the INFORMATION_SCHEMA GLOBAL_VARIABLES and > SESSION_VARIABLES tables. > > You could use the python warnings filter to turn these warnings into > exceptions: > > import warnings > warnings.simplefilter("error") > > ...which will give you an exception and a stack trace, so you can see > where these warnings are coming from. > > Simon > > On Wed, Aug 22, 2018 at 10:37 AM <imad.youbi.idri...@gmail.com> wrote: > >> Sorry for my last messy message, here's a better version. >> >> That's a good question actually. If you follow my Stackoverflow Post >> you'll see I've updated it with the following information : >> >> >> The dataframe that is persisted in the database (See attached image): >> >> >> [image: DataFrame.JPG] >> >> So I actually have no idea wherethe column "VARIABLE_VALUE" is coming >> from. >> >> >> On Wednesday, August 22, 2018 at 10:37:30 AM UTC+2, Simon King wrote: >>> >>> I've never used Pandas, so this may not make any sense, but where does >>> the column "VARIABLE_VALUE" come from? Is it a column in your >>> dataframe? >>> >>> Simon >>> >>> On Wed, Aug 22, 2018 at 8:52 AM <imad.youb...@gmail.com> wrote: >>> > >>> > I get the following warnings, when trying to save a simple dataframe >>> to mysql.: >>> > >>> > > C:\...\anaconda3\lib\site-packages\pymysql\cursors.py:170: Warning: >>> (1366, "Incorrect string value: '\\x92\\xE9t\\xE9)' for column >>> 'VARIABLE_VALUE' at row 518") >>> > result = self._query(query) >>> > >>> > And >>> > > C:\...anaconda3\lib\site-packages\pymysql\cursors.py:170: Warning: >>> > > (3719, "'utf8' is currently an alias for the character set UTF8MB3, >>> > > but will be an alias for UTF8MB4 in a future release. Please >>> consider >>> > > using UTF8MB4 in order to be unambiguous.") result = >>> > > self._query(query) >>> > >>> > Environment info : I use Mysql8, python3.6 (pymysql 0.9.2, sqlalchemy >>> 1.2.1) >>> > >>> > I visited posts like the one linked bellow, none of which seem to give >>> a solution as to how to avoid this warning. >>> > >>> > - [MySQL “incorrect string value” error when save unicode string in >>> Django][1] -> Indication is to use UTF8 >>> > >>> > >>> > N.B : The Collation in the table within mysql doesn't seem to be set >>> to the one I specified in the `create_db` function within the `Connection` >>> class. >>> > >>> > The executable code: >>> > >>> > import DataEngine.db.Connection as connection >>> > import random >>> > import pandas as pd >>> > >>> > if __name__ == "__main__": >>> > conn = connection.Connection(host="host_name", port="3306", >>> user="username", password="password") >>> > conn.create_db("raw_data") >>> > conn.establish("raw_data") >>> > l1 = [] >>> > for i in range(100): >>> > l_nested = [] >>> > for j in range(10): >>> > l_nested.append(random.randint(0, 100)) >>> > l1.append(l_nested) >>> > df = pd.DataFrame(l1) >>> > >>> > conn.save(df, "random_df") >>> > # df2 = conn.retrieve("random_df") >>> > >>> > My `Connection class` >>> > >>> > import sqlalchemy >>> > import pymysql >>> > import pandas as pd >>> > >>> > >>> > class Connection: >>> > def __init__(self: object, host: str, port: str, user: str, >>> password: str): >>> > self.host = host >>> > self.port = port >>> > self.user = user >>> > self.password = password >>> > self.conn = None >>> > >>> > def create_db(self: object, db_name: str, charset: str = >>> "utf8mb4", collate:str ="utf8mb4_unicode_ci",drop_if_exists: bool = >>> True): >>> > c = pymysql.connect(host=self.host, user=self.user, >>> password=self.password) >>> > if drop_if_exists: >>> > c.cursor().execute("DROP DATABASE IF EXISTS " + >>> db_name) >>> > c.cursor().execute("CREATE DATABASE " + db_name + " >>> CHARACTER SET=" + charset + " COLLATE=" + collate) >>> > c.close() >>> > print("Database %s created with a %s charset" % (db_name, >>> charset)) >>> > >>> > def establish(self: object, db_name: str, charset: str = >>> "utf8mb4"): >>> > self.conn = sqlalchemy.create_engine( >>> > "mysql+pymysql://" + self.user + ":" + self.password + >>> "@" + self.host + ":" + self.port + "/" + db_name + >>> > "?charset=" + charset) >>> > print("Connection with database : %s has been established >>> as %s at %s." % (db_name, self.user, self.host)) >>> > print("Charset : %s" % charset) >>> > >>> > def retrieve(self, table): >>> > df = pd.read_sql_table(table, self.conn) >>> > return df >>> > >>> > def save(self: object, df: "Pandas.DataFrame", table: str, >>> if_exists: str = "replace", chunksize: int = 10000): >>> > df.to_sql(name=table, con=self.conn, if_exists=if_exists, >>> chunksize=chunksize) >>> > >>> > Some elements that might help: >>> > [![Database is of charset utf8mb4][2]][2] >>> > [![Table columns don't seem to have the correct collation even though >>> I specified it when creating the db][3]][3] >>> > >>> > >>> > [1]: https://stackoverflow.com/questions/2108824/mysql- >>> incorrect-string-value-error-when-save-unicode-string-in-django >>> > [2]: https://i.stack.imgur.com/9iAPF.png >>> > [3]: https://i.stack.imgur.com/qBq6U.png >>> > >>> > -- >>> > SQLAlchemy - >>> > The Python SQL Toolkit and Object Relational Mapper >>> > >>> > http://www.sqlalchemy.org/ >>> > >>> > To post example code, please provide an MCVE: Minimal, Complete, and >>> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >>> description. >>> > --- >>> > You received this message because you are subscribed to the Google >>> Groups "sqlalchemy" group. >>> > To unsubscribe from this group and stop receiving emails from it, send >>> an email to sqlalchemy+...@googlegroups.com. >>> > To post to this group, send email to sqlal...@googlegroups.com. >>> > Visit this group at https://groups.google.com/group/sqlalchemy. >>> > For more options, visit https://groups.google.com/d/optout. >>> >> -- >> SQLAlchemy - >> The Python SQL Toolkit and Object Relational Mapper >> >> http://www.sqlalchemy.org/ >> >> To post example code, please provide an MCVE: Minimal, Complete, and >> Verifiable Example. See http://stackoverflow.com/help/mcve for a full >> description. >> --- >> You received this message because you are subscribed to the Google Groups >> "sqlalchemy" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sqlalchemy+unsubscr...@googlegroups.com. >> To post to this group, send email to sqlalchemy@googlegroups.com. >> Visit this group at https://groups.google.com/group/sqlalchemy. >> For more options, visit https://groups.google.com/d/optout. >> > -- > SQLAlchemy - > The Python SQL Toolkit and Object Relational Mapper > > http://www.sqlalchemy.org/ > > To post example code, please provide an MCVE: Minimal, Complete, and > Verifiable Example. See http://stackoverflow.com/help/mcve for a full > description. > --- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at https://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- SQLAlchemy - The Python SQL Toolkit and Object Relational Mapper http://www.sqlalchemy.org/ To post example code, please provide an MCVE: Minimal, Complete, and Verifiable Example. See http://stackoverflow.com/help/mcve for a full description. --- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.