JuliaPy / JuliaPy/PyCall.jl

Can't automatically convert KeyedTuple (from sqlalchemy) to Julia's NamedTuple

Offen
#700 6 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Julia
Sterne
1.5k
Forks
186
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

I use PyCall to call sqlalchemy from Julia, which uses a class called `KeyedTuple` to represent rows resulting from a query and I want to convert those automatically to julia's `NamedTuple`. I expected something like this to work:

```julia
using PyCall

sa = pyimport("sqlalchemy")

pytype_mapping(sa."util"."KeyedTuple", NamedTuple)

Base.convert(::Type{NamedTuple}, o::PyObject) = NamedTuple{Symbol.(o._fields)}([getproperty(o, f) for f in Symbol.(o._fields)])

x = sa.util.KeyedTuple([1, 2, 3], labels=["one", "two", "three"]) # returns (1, 2, 3)

```

This is no surprise, since:

```julia
o = @pycall sa.util.KeyedTuple([1, 2, 3], labels=["one", "two", "three"])::PyObject

pytype_query(o) # Returns `Tuple{Integer,Integer,Integer}`
```

I guess a simple way to make my thing work would be to alter the order in which `pytype_query` does things> I mean first look for a match in the `pytype_queries` array and then proceed with the rest...?

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Rechercherichtung

Start with the pytype_query and pytype_queries entry points mentioned in the issue, then reproduce the Julia/PyCall example using SQLAlchemy's util.KeyedTuple. Determine whether the type-specific mapping should be checked before the existing tuple handling, and consider the conversion complete when the example produces a NamedTuple with the expected field names and values.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
julia, python, sqlalchemy
Bereich
databases
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.