Building an queryset isn't really possible, but if all you want is
model instances that are instantiated with data from your cursor, you
can instantiate model instances directly from row data. For example,
if your have an Author model, you could do something like the
following:
>>> cursor.execute('SELECT ...')
>>> row = cursor.fetchone()
>>> a = Author(*row)
At this point, a will be a fully populated Author instance,
indistinguishable from one retrieved using a queryset.
The caveat on this technique is that the SELECT you execute using the
cursor to obtain the row must contain all the columns in your model,
specified in the same order that your model defines them. This
includes the auto-added id column, if appropriate. If you're uncertain
which fields will be required, and in what order, Author._meta.fields
contains the list that Django will expect.
If you need to return multiple rows and produce multiple instances,
iterate over the returned rows and construct an instance for each row,
storing the result. The end product won't be a queryset, but it will
be an iterable collection of Django model instances.
Yours,
Russ Magee %-)
> >>> cursor.execute('SELECT ...')
> >>> row = cursor.fetchone()
> >>> a = Author(*row)
>
> At this point, a will be a fully populated Author instance,
> indistinguishable from one retrieved using a queryset.
>
> The caveat on this technique is that the SELECT you execute using the
> cursor to obtain the row must contain all the columns in your model,
> specified in the same order that your model defines them. This
> includes the auto-added id column, if appropriate. If you're uncertain
> which fields will be required, and in what order, Author._meta.fields
> contains the list that Django will expect.
If you only have a subset of the fields, or if they aren't in the
expected order, you can also supply the values as keyword argument
parameters to the model initialisation function. Zip up the values with
the names of the parameters they represent and pass that in:
fields = ('name', 'age', 'data')
results = []
for row in cursor.fetchall():
params = zip(fields, row)
results.append(Author(**params)
Regards,
Malcolm