reallymemorable
reallymemorable

Reputation: 1024

psycopg2 adding quotes around my string that is creating problems

I have the following script:

create_table_WAC = """
create table if not exists %s (
    w_geocode text,
    C000 text,
    CFS04 text,
    CFS05 text,
    createdate text
)
"""

target_directory = Path(sys.argv[1]).resolve()

for file in target_directory.rglob('*.csv'):

    table_name = 'opendata_uscensus_lodes_' + str(file.stem)
    print(table_name)

    # MAKE SURE THIS IS THE RIGHT TABLE FOR THE FILES
    cur.execute(create_table_WAC, (table_name,))

    with open(file,'r') as file_in:

        # MAKE SURE THIS HAS THE RIGHT TABLE NAME IN THE COPY STATEMENT
        cur.copy_expert("copy %s from stdin with csv header delimiter ','", table_name, file_in)

        conn.commit()

conn.close()

When I run it, it throws this error related to the CREATE TABLE command. I don't understand why there are '' added -- and how do I remove them?

Here is the error:

psycopg2.ProgrammingError: syntax error at or near "'opendata_uscensus_lodes_ca_wac_SA02_JT03_2003'"
LINE 2: create table if not exists 'opendata_uscensus_lodes_ca_wac_S...

Upvotes: 0

Views: 99

Answers (1)

klin
klin

Reputation: 121474

Use SQL string composition:

from psycopg2 import sql

create_table_WAC = """
create table if not exists {} ( -- note changed placeholder
    w_geocode text,
    C000 text,
    CFS04 text,
    CFS05 text,
    createdate text
)
"""

# ...

    cur.execute(sql.SQL(create_table_WAC).format(sql.Identifier(table_name)))

Read the comprehensive explanation in the documentation.

Upvotes: 2

Related Questions