Hi Simon, Thank you for your explanation.
I managed to create the table by using df.to_sql. My mistake was because I was using a serie to sql instead of a dataframe. On Fri, Feb 25, 2022 at 5:33 AM Simon King <si...@simonking.org.uk> wrote: > I don't know enough about Pandas to explain your error, but I did > notice that the SQL that is failing is trying to insert into a table > called "mlstreb", but elsewhere in your code you refer to "mls_treb". > Could that be part of the problem? > > To define a table from your CSV file, you could do something like this > (untested): > > ############################### > import csv > import sqlalchemy as sa > > def get_columntype(column_definition): > if column_definition["DataType"] == "Character": > return sa.String(column_definition["MaximumLength"]) > elif column_definition["DataType"] == "Decimal": > return sa.Numeric() > # etc. > > > def get_columns(csvfile): > with open(csvfile, "r") as f: > reader = csv.DictReader(f) > column_definitions = list(reader) > > columns = [] > for cd in column_definitions: > column = sa.Column(cd["DBName"], get_columntype(cd)) > columns.append(column) > return columns > > def create_table(metadata, tablename, csvfile): > columns = get_columns(csvfile) > return sa.Table(tablename, metadata, *columns) > > > metadata = sa.MetaData() > res_table = create_table(metadata, "res", "res_data_dictionary.csv") > mls_table = create_table(metadata, "mls", "mls_data_dictionary.csv") > > engine = sa.create_engine("...") > metadata.create_all(engine) > > ############################### > > "res_table" and "mls_table" in the code above are instances of > sqlalchemy.Table, which is part of "SQLAlchemy Core": > > > https://docs.sqlalchemy.org/en/14/core/metadata.html#sqlalchemy.schema.Table > > If you want to use the ORM layer of SQLAlchemy, you can map classes to > those tables something like this: > > > https://docs.sqlalchemy.org/en/14/orm/mapping_styles.html#imperative-a-k-a-classical-mappings > > import sqlalchemy.orm as asorm > > mapper_registry = saorm.registry(metadata) > > class Res: > pass > > mapper_registry.map_imperatively(Res, res_table) > > # Now Res will have properties for each of the columns from res_table > > Hope that helps, > > Simon > > > On Thu, Feb 24, 2022 at 1:22 PM janio mendonca junior > <janio...@gmail.com> wrote: > > > > Hi Simon, > > let me try to explain myself. > > > > The picture below is a sample of the 260 fields from the table res_treb > data_dictionary.csv that I have to create. > > > > > > I have started trying to create the table by defining the class table, > and defining the fields, however I noticed that will take so long because I > have two more tables to define with the same number of fields. Below is the > sample code that I am manually defining (column by column) in the Res table. > > > > > > > > > > I was thinking about something like your suggestion to read the DBName > column from .csv, create a list and define the table columns, however I > don't know how to do it. I know how to create the list with a DBName > column, but how to make the attribution, for example: area_code = > Column(String(4))? > > > > Second Approach > > > > Regarding the df.to_sql from pandas I have found two problems, how to > define the primary key and foreign key using the command below? > > > > I have tried to overcome this problem by using. > > this is the problem when I try to insert using df.to_sql: I have a row > > and I am trying to insert on the table mls_treb if it doesn't exist > > > > I got this error that looks like it is related to the index but I could > not figure it out. The field mls_number is declared as the primary key in > my table mls_treb. > > > > Traceback (most recent call last): > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 1782, in _execute_context > > self.dialect.do_executemany( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/default.py", > line 729, in do_executemany > > cursor.executemany(statement, parameters) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/cursor.py", > line 670, in executemany > > return self.execute(stmt) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/cursor.py", > line 568, in execute > > self._handle_result(self._connection.cmd_query(stmt)) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/connection.py", > line 854, in cmd_query > > result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/connection.py", > line 664, in _handle_result > > raise errors.get_exception(packet) > > mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column > 'mls_number' in 'field list' > > The above exception was the direct cause of the following exception: > > Traceback (most recent call last): > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/sql.py", > line 1419, in to_sql > > raise err > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/sql.py", > line 1411, in to_sql > > table.insert(chunksize, method=method) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/sql.py", > line 845, in insert > > exec_insert(conn, keys, chunk_iter) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/sql.py", > line 762, in _execute_insert > > conn.execute(self.table.insert(), data) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 1289, in execute > > return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", > line 325, in _execute_on_connection > > return connection._execute_clauseelement( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 1481, in _execute_clauseelement > > ret = self._execute_context( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 1845, in _execute_context > > self._handle_dbapi_exception( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 2026, in _handle_dbapi_exception > > util.raise_( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/util/compat.py", > line 207, in raise_ > > raise exception > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/base.py", > line 1782, in _execute_context > > self.dialect.do_executemany( > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/sqlalchemy/engine/default.py", > line 729, in do_executemany > > cursor.executemany(statement, parameters) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/cursor.py", > line 670, in executemany > > return self.execute(stmt) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/cursor.py", > line 568, in execute > > self._handle_result(self._connection.cmd_query(stmt)) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/connection.py", > line 854, in cmd_query > > result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) > > File > "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/mysql/connector/connection.py", > line 664, in _handle_result > > raise errors.get_exception(packet) > > sqlalchemy.exc.ProgrammingError: > (mysql.connector.errors.ProgrammingError) 1054 (42S22): Unknown column > 'mls_number' in 'field list' > > [SQL: INSERT INTO mlstreb (mls_number, `0`) VALUES (%(mls_number)s, > %(0)s)] > > [parameters: ({'mls_number': 'mls_number', '0': 'C5405199'}, > {'mls_number': 'active', '0': True}, {'mls_number': 'class_name', '0': > 'RES'}, {'mls_number': 'active_date', '0': datetime.date(2022, 1, 3)})] > > (Background on this error at: https://sqlalche.me/e/14/f405) > > > > On Thu, Feb 24, 2022 at 4:01 AM Simon King <si...@simonking.org.uk> > wrote: > >> > >> Before we do that, you said that you tried pandas dataframe.to_sql but > >> it didn't work - can you explain what you mean? Did it raise an error, > >> or produce the wrong result, or something else? > >> > >> Simon > >> > >> On Wed, Feb 23, 2022 at 9:13 PM janio mendonca junior > >> <janio...@gmail.com> wrote: > >> > > >> > Hi Simon, > >> > > >> > Thank you for your help. I am brand new working with SQLalchemy, > really appreciate if you explain how to generate the metadata with the list > of column names from the .CSV to create the tables? > >> > > >> > On Wed, Feb 23, 2022, 3:52 PM Simon King <si...@simonking.org.uk> > wrote: > >> >> > >> >> Build a list of Column objects from the columns in the CSV file, and > >> >> use that list to create a Table: > >> >> > >> >> https://docs.sqlalchemy.org/en/14/core/metadata.html > >> >> > >> >> Once you've created the Table, you can insert data into it using the > >> >> table.insert() method: > >> >> > >> >> > https://docs.sqlalchemy.org/en/14/core/tutorial.html#executing-multiple-statements > >> >> > >> >> Hope that helps, > >> >> > >> >> Simon > >> >> > >> >> On Wed, Feb 23, 2022 at 8:42 PM janio mendonca junior > >> >> <janio...@gmail.com> wrote: > >> >> > > >> >> > Hi all, > >> >> > > >> >> > I have a inquiry from my job to create 2 tables related one-to-one > and insert some rows on the table. I have a .CSV with the data dictionary > from the table and I am wondering to know how to declare the tables columns > automatically without write one by one column (there are 260 columns). Same > thing for the insert, how to add rows to the multiple columns table without > write column by column? > >> >> > > >> >> > I have the data in a Data frame but I was not able to insert it > using df.to_sql from pandas. Do you guys have any similar example? > >> >> > > >> >> > Thank you all > >> >> > > >> >> > -- > >> >> > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CADF7wwb0_ncRuU_CadqFegE9583W-xWWD4x%3DGy8V%3DgW0jKtcyg%40mail.gmail.com > . > >> >> > >> >> -- > >> >> 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CAFHwexexvrpmr%3DEA4w%3DmncyiKyxj0yk%3Dcr9_%2Br%3Db3MCyOiHg%3DA%40mail.gmail.com > . > >> > > >> > -- > >> > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CADF7wwYLD-OrxU9-Eq5mnSMoCBJ-EcFEcD%3DVXUEJJNLCx_dOjw%40mail.gmail.com > . > >> > >> -- > >> 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CAFHwexfbN8Wt6MPp1PY6-gptjL5zdMmjy5z5YAFsczdgES%2B8Uw%40mail.gmail.com > . > > > > -- > > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CADF7wwbR5mSkPHJ-sRQJGKzp9i2Xk_thj4UhbRVhwSsZfYshkw%40mail.gmail.com > . > > -- > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CAFHwexcHUtTyxH60UESJsAqU9izMXnBp9ghRTLfAST%3Ddb7sB2w%40mail.gmail.com > . > -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CADF7wwaR8%2B7Dn_Fyop5x2RNES-Qf3t_wRnYymOO4w0b_N8VNOg%40mail.gmail.com.