Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t6sBW-00G8o9-JX for psycopg@arkaria.postgresql.org; Fri, 01 Nov 2024 13:59:31 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1t6sBU-00EBYK-Vo for psycopg@arkaria.postgresql.org; Fri, 01 Nov 2024 13:59:29 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1t6sBU-00EBY4-Av for psycopg@lists.postgresql.org; Fri, 01 Nov 2024 13:59:29 +0000 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t6sBQ-003yHm-Ja for psycopg@lists.postgresql.org; Fri, 01 Nov 2024 13:59:27 +0000 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-2689e7a941fso1017902fac.3 for ; Fri, 01 Nov 2024 06:59:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ontko-com.20230601.gappssmtp.com; s=20230601; t=1730469564; x=1731074364; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=3vMciGIgOJw8frdLHy0nGNy98ujFh+aF2Xts7JoCI3k=; b=wdifAa4eYPcmOJBonKVY6swF7ys2AMKvA3ixTYBCr6dGWp2ZO/SQDAZjspdw7QTacF JxYpzsMIvQOwLYCSFd2HLVlaQ9FprJaQZB31wwyRSU6J09xuFCDCJyAabpUKFJaqkVa4 srtbJNSHxmABgmEQX4wUdAfP96IHjur1bVYBLiAqbvBXJCtjIfP17E1EXqHVdHvBwwcO u9GtIyCN0B93u0pYQh9+Dkae5VH2aOFmWrpMUSHhNZOCd63fPFOIoRWwT7QGG+C8eQnc o4M48hZJGtfMWfDs9lyXiAS48dIJqaZNJSq2VMk1JLYB8AwUow2OAhdOtUIkbC8Wsgx3 GRSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730469564; x=1731074364; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=3vMciGIgOJw8frdLHy0nGNy98ujFh+aF2Xts7JoCI3k=; b=gWN1ir1PEJ0RhVABYbyLFalWEAT6wr2j2kJ4csqsBBs4HukIOPuXC2LmnUIzx7igy+ nqgaK7OiS9gaL3Wf+JGPSxfK5rlZUsD5KqnWiGXFtIH3NAYjEEUDkcAtj4feQWZ7ETnQ 4cqVfTn78vFdlpGuS+klEwdA3zjp+4RMqi+bPDYSLkiIrRrCu+uHyYEnuoQmmNwF4sk6 mOpQgVMu2ukfwIAaO6BsDyca92/wVJkyXoRYtWZRH9397/7xXnOB9jSHhj9ByTQyfgeF k3HDlxTz7lU59NCByegVnAwWu/6Bb8B3ZPFB6GMzASRGFhdCTb+fV+wlSJaPY9SEYG24 46eQ== X-Gm-Message-State: AOJu0YxVanBagC3u0YXnDzdX7B9/QgusvNmudenAynj+eA9RSz7DKoyC je4SuvQRcq5V0QY7l2ACX4vP3LM5gbpGKAu99ZOiuKqXz5YDG9sk30HoaJwPJFJPdh44Y8RzKM1 AZsVRhJH6EUFp6moxxnKO9cx3/2GneDlcBBRATVTRVJnko2ZYjg== X-Google-Smtp-Source: AGHT+IHLEZRnd4dRgBP5yY5O5dlbBENkHhj984MItF8XDmUSZCMK7ZrLJDrTZ5mPxNhUvSj9pyjkZfTc3C69RyQM5cE= X-Received: by 2002:a05:6870:e0ca:b0:288:a00e:92dc with SMTP id 586e51a60fabf-2948442bbe5mr6287743fac.2.1730469563686; Fri, 01 Nov 2024 06:59:23 -0700 (PDT) MIME-Version: 1.0 References: <20241101111747.Horde.GgVaeCJ_Ig6HsmcfjbNwguM@webmail.gelassene-pferde.biz> In-Reply-To: <20241101111747.Horde.GgVaeCJ_Ig6HsmcfjbNwguM@webmail.gelassene-pferde.biz> From: Jim Sizelove Date: Fri, 1 Nov 2024 09:59:13 -0400 Message-ID: Subject: Re: TypeError: dict is not a sequence To: thiemo@gelassene-pferde.biz Cc: psycopg Content-Type: multipart/alternative; boundary="000000000000a38b7e0625da57d6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a38b7e0625da57d6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Thiemo, I suspect the source of the problem is the commented-out line -- ST_FromGDALRaster(pg_read_binary_file(%s)), in the statement. I get a similar error when I try to reproduce the problem. >>> print(stmt) > select -- %s > %(ts)s > >>> params > {'ts': datetime.datetime(2024, 11, 1, 9, 21, 30, 283439)} > >>> cur.execute(stmt, params) > Traceback (most recent call last): > File "", line 1, in > File > "/home/jims/venvs/psycopg/lib/python3.12/site-packages/psycopg/cursor.py"= , > line 97, in execute > raise ex.with_traceback(None) > psycopg.ProgrammingError: positional and named placeholders cannot be mix= ed Maybe the difference in the errors is due to a different version of psycopg? This is what I am using: >>> sys.version > '3.12.3 (main, Sep 11 2024, 14:17:37) [GCC 13.2.0]' > >>> psycopg.__version__ > '3.2.3' Regards, Jim On Fri, Nov 1, 2024 at 6:18=E2=80=AFAM wrote: > Hi > > I am trying to load data into a PostGIS table. For this purpose, I > have the following function I tried to cough up analogously to > https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries= . > > > def process_files(data_directory, file_name_regexp, conn, source_id, > logger): > loaded_files =3D > get_loaded_files(conn=3Dconn,source_id=3Dsource_id,logger=3Dlogger,) > existing_hashes =3D {file_hash for file_hash, _ in loaded_files} > > # "next" inhibits recursion, so only the top level is retrieved > logger.info(f"Looking into '{data_directory}'") > try: > cur =3D conn.cursor() > cur.execute("set postgis.gdal_enabled_drivers =3D 'ENABLE_ALL';"= ) > root, dirs, files =3D next(os.walk(data_directory)) > for file_name in files: > if re.match(file_name_regexp, file_name): > file_path =3D os.path.join(root, file_name) > logger.info(f"Processing '{file_path}'") > file_hash =3D calculate_file_sha3_512_hash(file_path) > file_creation_time =3D > datetime.fromtimestamp(os.path.getctime(file_path)) > > # If the hash is alread present, skip this file FIXME > check on file names > if file_hash in existing_hashes: > continue > > # Get the raster data > with open(file_path, 'rb') as f: > raster_data =3D f.read() > > statement =3D """merge > into > TOPO_FILES as TARGET > using > ( values > ( > -- ST_FromGDALRaster(pg_read_binary_file(%s)), > ST_FromGDALRaster(%(TILE)s::bytea), > %(FILE_NAME)s, > %(FILE_CREATION_PIT)s, > %(FILE_HASH)s, > %(SOURCE_ID)s::uuid > ) > ) as source ( TILE, FILE_NAME, FILE_CREATION_PIT, FILE_HASH, > SOURCE_ID ) > on > TARGET.FILE_NAME =3D SOURCE.FILE_NAME > and TARGET.SOURCE_ID =3D SOURCE.SOURCE_ID > and TARGET.FILE_HASH !=3D SOURCE.FILE_HASH > and TARGET.FILE_CREATION_PIT < SOURCE.FILE_CREATION_PIT > when matched > then > update > set > TILE =3D SOURCE.TILE, > FILE_NAME =3D SOURCE.FILE_NAME, > FILE_CREATION_PIT =3D SOURCE.FILE_CREATION_PIT, > FILE_HASH =3D SOURCE.FILE_HASH, > SOURCE_ID =3D SOURCE.SOURCE_ID > when not matched > then > insert > ( > TILE, > FILE_NAME, > FILE_CREATION_PIT, > FILE_HASH, > SOURCE_ID > ) > values > ( > SOURCE.TILE, > SOURCE.FILE_NAME, > SOURCE.FILE_CREATION_PIT, > SOURCE.FILE_HASH, > SOURCE.SOURCE_ID > );""" > logger.debug("statement") > logger.debug(statement) > logger.debug("First 100 bytes of raster_data") > logger.debug(f"{raster_data[:100]}") > logger.debug(f"file_name: {file_name} ") > logger.debug(f"file_creation_time: {file_creation_time} = ") > logger.debug(f"file_hash: {file_hash} ") > logger.debug(f"source_id: {source_id} ") > # params =3D (psycopg2.Binary(raster_data), file_name, > file_creation_time, file_hash, source_id) > params =3D {'TILE': raster_data > ,'FILE_NAME': file_name > ,'FILE_CREATION_PIT': file_creation_time > ,'FILE_HASH': file_hash > ,'SOURCE_ID': source_id} > # logger.debug(f"params: {params} ") > cur.execute(statement, params) > conn.commit() > cur.close() > except StopIteration: > logger.error(f"Error: '{data_directory}' could not be walked. > Directory might be empty or inaccessible.") > > > However, I get the mentioned error. > > 2024-11-01 11:06:58 - root - DEBUG - > source_id:4f68d890-a08c-4c06-8aa5-741ad36b6abe > Traceback (most recent call last): > File > "/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/load= _OpenTopography_data.py", > line 737, in > > main() > File > "/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/load= _OpenTopography_data.py", > line 714, in > main > process_files( > File > "/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/load= _OpenTopography_data.py", > line 442, in > process_files > cur.execute(statement, params) > TypeError: dict is not a sequence > > > I would very much appreciate, if someone shed some light on the matter. > > Kind regards > > Thiemo > > > > --000000000000a38b7e0625da57d6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Thiemo,

I suspect the source of the problem is t= he commented-out line
=C2=A0-- ST_FromGDALRaster(pg_read_binary_file(%s)),
in the statement.

I get a similar error whe= n I try to reproduce the problem.
>>> print(stmt)
select -- %s
%(t= s)s
>>> params
{'ts': datetime.datetime(2024, 11, 1,= 9, 21, 30, 283439)}
>>> cur.execute(stmt, params)
Traceback= (most recent call last):
=C2=A0 File "<stdin>", line 1,= in <module>
=C2=A0 File "/home/jims/venvs/psycopg/lib/python= 3.12/site-packages/psycopg/cursor.py", line 97, in execute
=C2=A0 = =C2=A0 raise ex.with_traceback(None)
psycopg.ProgrammingError: positiona= l and named placeholders cannot be mixed

Maybe the difference in the errors is due to a different versi= on of psycopg? This is what I am using:
>>> sys.version
'3.12.3 (main, = Sep 11 2024, 14:17:37) [GCC 13.2.0]'
>>> psycopg.__version_= _
'3.2.3'

Regards,=
Jim

On Fri, Nov 1, 2024 at 6:18=E2=80=AFAM <thiemo@gelassene-pferde.biz>= ; wrote:
Hi

I am trying to load data into a PostGIS table. For this purpose, I=C2=A0 have the following function I tried to cough up analogously to=C2=A0
https://www.psycopg.org/doc= s/usage.html#passing-parameters-to-sql-queries.


def process_files(data_directory, file_name_regexp, conn, source_id, logger= ):
=C2=A0 =C2=A0 =C2=A0loaded_files =3D=C2=A0
get_loaded_files(conn=3Dconn,source_id=3Dsource_id,logger=3Dlogger,)
=C2=A0 =C2=A0 =C2=A0existing_hashes =3D {file_hash for file_hash, _ in load= ed_files}

=C2=A0 =C2=A0 =C2=A0# "next" inhibits recursion, so only the top = level is retrieved
=C2=A0 =C2=A0 =C2=A0logger.info(f"Looking into '{data_directory}'= ")
=C2=A0 =C2=A0 =C2=A0try:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cur =3D conn.cursor()
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cur.execute("set postgis.gdal_enable= d_drivers =3D 'ENABLE_ALL';")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0root, dirs, files =3D next(os.walk(data_d= irectory))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for file_name in files:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if re.match(file_name_regex= p, file_name):
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file_path =3D= os.path.join(root, file_name)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.info(f&qu= ot;Processing '{file_path}'")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file_hash =3D= calculate_file_sha3_512_hash(file_path)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0file_creation= _time =3D=C2=A0
datetime.fromtimestamp(os.path.getctime(file_path))

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# If the hash= is alread present, skip this file FIXME=C2=A0
check on file names
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if file_hash = in existing_hashes:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0continue

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# Get the ras= ter data
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0with open(fil= e_path, 'rb') as f:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0raster_data =3D f.read()

=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0statement =3D= """merge
into
=C2=A0 =C2=A0 =C2=A0TOPO_FILES as TARGET
using
=C2=A0 =C2=A0 =C2=A0( values
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-- ST_FromGDALRaster(pg_rea= d_binary_file(%s)),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ST_FromGDALRaster(%(TILE)s:= :bytea),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0%(FILE_NAME)s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0%(FILE_CREATION_PIT)s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0%(FILE_HASH)s,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0%(SOURCE_ID)s::uuid
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0)
=C2=A0 =C2=A0 =C2=A0) as source ( TILE, FILE_NAME, FILE_CREATION_PIT, FILE_= HASH, SOURCE_ID )
on
=C2=A0 =C2=A0 =C2=A0TARGET.FILE_NAME =3D SOURCE.FILE_NAME
and TARGET.SOURCE_ID =3D SOURCE.SOURCE_ID
and TARGET.FILE_HASH !=3D SOURCE.FILE_HASH
and TARGET.FILE_CREATION_PIT < SOURCE.FILE_CREATION_PIT
when matched
=C2=A0 =C2=A0 =C2=A0then
update
set
=C2=A0 =C2=A0 =C2=A0TILE =3D SOURCE.TILE,
=C2=A0 =C2=A0 =C2=A0FILE_NAME =3D SOURCE.FILE_NAME,
=C2=A0 =C2=A0 =C2=A0FILE_CREATION_PIT =3D SOURCE.FILE_CREATION_PIT,
=C2=A0 =C2=A0 =C2=A0FILE_HASH =3D SOURCE.FILE_HASH,
=C2=A0 =C2=A0 =C2=A0SOURCE_ID =3D SOURCE.SOURCE_ID
when not matched
=C2=A0 =C2=A0 =C2=A0then
insert
=C2=A0 =C2=A0 =C2=A0(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0TILE,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0FILE_NAME,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0FILE_CREATION_PIT,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0FILE_HASH,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE_ID
=C2=A0 =C2=A0 =C2=A0)
=C2=A0 =C2=A0 =C2=A0values
=C2=A0 =C2=A0 =C2=A0(
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE.TILE,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE.FILE_NAME,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE.FILE_CREATION_PIT,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE.FILE_HASH,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SOURCE.SOURCE_ID
=C2=A0 =C2=A0 =C2=A0);"""
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= "statement")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= statement)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= "First 100 bytes of raster_data")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= f"{raster_data[:100]}")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= f"file_name: {file_name} ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= f"file_creation_time: {file_creation_time} ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= f"file_hash: {file_hash} ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.debug(= f"source_id: {source_id} ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# params =3D = (psycopg2.Binary(raster_data), file_name,=C2=A0
file_creation_time, file_hash, source_id)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0params =3D {&= #39;TILE': raster_data
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ,'FILE_NAME': file_name
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ,'FILE_CREATION_PIT': file_creation_time
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ,'FILE_HASH': file_hash
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 ,'SOURCE_ID': source_id}
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0# logger.debu= g(f"params: {params} ")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cur.execute(s= tatement, params)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0conn.commit()=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0cur.close() =C2=A0 =C2=A0 =C2=A0except StopIteration:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0logger.error(f"Error: '{data_dir= ectory}' could not be walked.=C2=A0
Directory might be empty or inaccessible.")


However, I get the mentioned error.

2024-11-01 11:06:58 - root - DEBUG -=C2=A0
source_id:4f68d890-a08c-4c06-8aa5-741ad36b6abe
Traceback (most recent call last):
=C2=A0 =C2=A0File=C2=A0
"/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/l= oad_OpenTopography_data.py", line 737, in=C2=A0
<module>
=C2=A0 =C2=A0 =C2=A0main()
=C2=A0 =C2=A0File=C2=A0
"/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/l= oad_OpenTopography_data.py", line 714, in=C2=A0
main
=C2=A0 =C2=A0 =C2=A0process_files(
=C2=A0 =C2=A0File=C2=A0
"/home/thiemo/external_projects/svn/33/trunk/code_files/data_storage/l= oad_OpenTopography_data.py", line 442, in=C2=A0
process_files
=C2=A0 =C2=A0 =C2=A0cur.execute(statement, params)
TypeError: dict is not a sequence


I would very much appreciate, if someone shed some light on the matter.

Kind regards

Thiemo



--000000000000a38b7e0625da57d6--