[ 
https://issues.apache.org/jira/browse/IGNITE-22719?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Pavel Tupitsyn updated IGNITE-22719:
------------------------------------
    Labels: ignite-3 import  (was: ignite-3)

> Python DB API Driver 3.0
> ------------------------
>
>                 Key: IGNITE-22719
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22719
>             Project: Ignite
>          Issue Type: Epic
>          Components: platforms, python, thin client
>            Reporter: Igor Sapego
>            Assignee: Igor Sapego
>            Priority: Major
>              Labels: ignite-3, import
>
> h3. Requirements
> * The implementation of the Python DB API or the Driver should be implemented 
> using Python 3;
> * The Driver should comply with Python DB-API 2.0: 
> https://peps.python.org/pep-0249/;
> * Performance of the Driver should be similar to the performance of other 
> clients and drivers, e.g. JDBC;
> * The first implementation should be as simple as possible, but it should be 
> functional and allow for improvements in future;
> * Preferably the Driver should be designed in such a way that makes it 
> possible in the future to extend Driver’s API and turn it into a full-fledged 
> Python Client.
> h4. Code Reuse
> It is proposed to re-use the protocol part, which is currently used by ODBC 
> and JDBC drivers. Its functionality should be more than enough for 
> implementation of the Driver, as the DB API is much simpler than both JDBC 
> and ODBC.
> It is also proposed to re-use C++ code for data packing-unpacking (protocol 
> messages, binary tuples).
> It’s important to point out that in most of the implementations of such 
> drivers, C/C++ code is duplicated in Python, but the first implementation of 
> our Driver won’t include duplication of C++ code for the sake of simplicity. 
> This means, if the user won’t be able to compile our C++ code on their 
> platform for any reason, they won’t be able to use our Driver.
> h4. Type Mapping
> The implementation of the specification is pretty straightforward and there 
> is no need to discuss implementation of methods in detail. The only part that 
> should probably be discussed is a data type mapping.
> The following type mapping is suggested for the Driver:
> ||Ignite Type||DB API Type||Python Type||
> |NIL|None|None|
> |BOOLEAN|NUMBER|bool|
> |INT8|NUMBER|int|
> |INT16|NUMBER|int|
> |INT32|NUMBER|int|
> |INT64|NUMBER|int|
> |FLOAT|NUMBER|float|
> |DOUBLE|NUMBER|float|
> |DECIMAL|NUMBER|decimal.Decimal|
> |DATE|DATETIME|datetime.date|
> |TIME|DATETIME|datetime.time|
> |DATETIME|DATETIME|datetime.datetime|
> |TIMESTAMP|NUMBER|Timestamp(float)|
> |UUID|STRING|uuid.UUID|
> |STRING|STRING|str|
> |BYTE_ARRAY|BINARY|bytes|
> |PERIOD|DATETIME|???|
> |DURATION|DATETIME|datetime.timedelta|



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to