Wie kann ich mit SQLalchemy Daten zu einer Geometriespalte in Supabase hinzufügen?Python

Python-Programme
Guest
 Wie kann ich mit SQLalchemy Daten zu einer Geometriespalte in Supabase hinzufügen?

Post by Guest »

Ich habe die folgende Tabelle in Supabase, in der ich die Postgis-Erweiterung installiert habe:

Code: Select all

create table
public.prueba (
id smallint generated by default as identity not null,
name text null,
age smallint null,
created_at timestamp without time zone null,
punto geography null,
constraint prueba_pkey primary key (id)
) tablespace pg_default;
was sich auf diese SQLalchemy-Klasse bezieht:

Code: Select all

class Prueba(Base):
__tablename__ = "prueba"

id: Mapped[int] = mapped_column(
sa.SmallInteger, sa.Identity(start=1), primary_key=True
)
name: Mapped[str] = mapped_column(sa.String(50), nullable=False)
age: Mapped[int] = mapped_column(sa.Integer, nullable=False)
created_at: Mapped[datetime] = mapped_column(sa.DateTime, default=datetime.now)
punto: Mapped[WKBElement] = mapped_column(
Geometry(geometry_type="POINT", srid=4326, spatial_index=True)
)
Ich verwende geoalchemy2, wie in dieser Frage vorgeschlagen, aber jedes Mal, wenn ich versuche, Daten zu dieser Tabelle hinzuzufügen, schlägt der Code fehl.
Der Code, den ich zum Hinzufügen verwende Die Daten lauten wie folgt:

Code: Select all

prueba = Prueba(
name="Prueba_2",
age=5,
created_at=datetime.now(),
punto="POINT(-1.0 1.0)",
)

with Session() as session:
session.add(prueba)
session.commit()
Ich habe die Daten auf diese Weise hinzugefügt, weil ich dem Geoalchemy2-ORM-Tutorial gefolgt bin, aber wenn ich es ausführe, erhalte ich diese Ausnahme:

Code: Select all

  File "c:...\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 941, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedFunction) function st_geomfromewkt(unknown) does not exist
LINE 1: ...a_2', 5, '2024-12-28T18:49:07.130429'::timestamp, ST_GeomFro...
^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

[SQL: INSERT INTO prueba (name, age, created_at, punto) VALUES (%(name)s, %(age)s, %(created_at)s, ST_GeomFromEWKT(%(punto)s)) RETURNING prueba.id]
[parameters: {'name': 'Prueba_2', 'age': 5, 'created_at': datetime.datetime(2024, 12, 28, 18, 49, 7, 130429), 'punto': 'POINT(-1.0 1.0)'}]
(Background on this error at: https://sqlalche.me/e/20/f405)
Ich vermute, dass der Fehler in der Art und Weise liegt, wie ich die Klasse definiert habe, da der gleiche Fehler auftritt, wenn ich den punto-Wert leer lasse.
Außerdem habe ich versucht, einen ähnlichen Ansatz wie in diesem Tutorial zu verwenden und die Daten mit diesem Code hinzuzufügen:

Code: Select all

punto=WKBElement("POINT(10 25)", srid=4326),
gibt mir einen anderen Fehler:

Code: Select all

 File "c:\...\back\main.py", line 16, in main
punto=WKBElement("POINT(10 25)", srid=4326),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\...\.venv\Lib\site-packages\geoalchemy2\elements.py", line 201, in __init__
header = binascii.unhexlify(data[:18])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
binascii.Error: Non-hexadecimal digit found

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post