{"id":25806724,"url":"https://github.com/sqlitecloud/sqlitecloud-py","last_synced_at":"2025-02-27T20:29:01.425Z","repository":{"id":213374269,"uuid":"699681886","full_name":"sqlitecloud/sqlitecloud-py","owner":"sqlitecloud","description":" Python drivers for SQLite Cloud ","archived":false,"fork":false,"pushed_at":"2024-09-02T07:26:52.000Z","size":694,"stargazers_count":18,"open_issues_count":8,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-25T11:50:35.289Z","etag":null,"topics":["cloud","database","sqlite"],"latest_commit_sha":null,"homepage":"https://sqlitecloud.io","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sqlitecloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-03T06:01:42.000Z","updated_at":"2024-12-30T22:28:36.000Z","dependencies_parsed_at":"2024-06-03T08:57:45.270Z","dependency_job_id":"aaf74dea-3901-4e4a-a938-bb18742ef40e","html_url":"https://github.com/sqlitecloud/sqlitecloud-py","commit_stats":null,"previous_names":["sqlitecloud/python"],"tags_count":75,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqlitecloud%2Fsqlitecloud-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqlitecloud%2Fsqlitecloud-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqlitecloud%2Fsqlitecloud-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqlitecloud%2Fsqlitecloud-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sqlitecloud","download_url":"https://codeload.github.com/sqlitecloud/sqlitecloud-py/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241056726,"owners_count":19901841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","database","sqlite"],"created_at":"2025-02-27T20:29:00.823Z","updated_at":"2025-02-27T20:29:01.417Z","avatar_url":"https://github.com/sqlitecloud.png","language":"Python","readme":"# Driver for SQLite Cloud\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://sqlitecloud.io/social/logo.png\" height=\"300\" alt=\"SQLite Cloud logo\"\u003e\n\u003c/p\u003e\n\n![Build Status](https://github.com/sqlitecloud/sqlitecloud-py/actions/workflows/test.yaml/badge.svg \"Build Status\")\n[![codecov](https://codecov.io/gh/sqlitecloud/sqlitecloud-py/graph/badge.svg?token=38G6FGOWKP)](https://codecov.io/gh/sqlitecloud/sqlitecloud-py)\n![PyPI - Version](https://img.shields.io/pypi/v/sqlitecloud?link=https%3A%2F%2Fpypi.org%2Fproject%2FSqliteCloud%2F)\n![PyPI - Downloads](https://img.shields.io/pypi/dm/sqlitecloud?link=https%3A%2F%2Fpypi.org%2Fproject%2FSqliteCloud%2F)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/sqlitecloud?link=https%3A%2F%2Fpypi.org%2Fproject%2FSqliteCloud%2F)\n\n\n- [SQLite Cloud](#)\n- [Compatibility with sqlite3 API](#compatibility-with-sqlite3-api)\n  - [Autocommit transactions: Difference between sqlitecloud and sqlite3](#autocommit-transactions-difference-between-sqlitecloud-and-sqlite3)\n- [Installation and Usage](#installation-and-usage)\n- [SQLite Cloud loves sqlite3](#sqlite-cloud-loves-sqlite3)\n- [SQLite Cloud for SQLAlchemy (beta)](#sqlite-cloud-for-sqlalchemy-beta)\n- [SQLite Cloud for Pandas DataFrame](#sqlite-cloud-for-pandas-dataframe)\n\n---\n\n[SQLite Cloud](https://sqlitecloud.io) is a powerful Python package that allows you to interact with the SQLite Cloud database seamlessly. It provides methods for various database operations. This package is designed to simplify database operations in Python applications, making it easier than ever to work with SQLite Cloud.\n\n\n## Compatibility with sqlite3 API\n\nWe aim for full compatibility with the Python built-in [sqlite3](https://docs.python.org/3.6/library/sqlite3.html) API (based on Python DBAPI 2.0 [PEP 249](https://peps.python.org/pep-0249)), with the primary distinction being that our driver connects to SQLite Cloud databases. This allows you to migrate your local SQLite databases to SQLite Cloud without needing to modify your existing Python code that uses the sqlite3 API.\n\n- Documentation: Our API closely follows the sqlite3 API. You can refer to the sqlite3 documentation for most functionality. The list of implemented features are documented [here](https://github.com/sqlitecloud/sqlitecloud-py/issues/8).\n- Source: [https://github.com/sqlitecloud/sqlitecloud-py](https://github.com/sqlitecloud/sqlitecloud-py)\n- Site: [https://sqlitecloud.io](https://sqlitecloud.io/developers)\n\n### Autocommit transactions: Difference between sqlitecloud and sqlite3\n\nIn `sqlitecloud`, autocommit is **always enabled**, and we currently do not support disabling it. This means that the `isolation_level` is always set to `None`, resulting in autocommit being permanently on.\n\nThis behavior differs from the sqlite3 Python module, where autocommit can be controlled (see details in the section [Controlling Transactions](https://docs.python.org/3.6/library/sqlite3.html#controlling-transactions) in the official documentation).\n\nTo manage transactions in sqlitecloud, you should explicitly use the `BEGIN`, `ROLLBACK`, `SAVEPOINT`, and `RELEASE` commands as needed.\n\n## Installation and Usage\n\n```bash\n$ pip install sqlitecloud\n```\n\n```python\nimport sqlitecloud\n\n# Open the connection to SQLite Cloud\nconn = sqlitecloud.connect(\"sqlitecloud://myhost.sqlite.cloud:8860?apikey=myapikey\")\n\n# You can autoselect the database during the connect call\n# by adding the database name as path of the SQLite Cloud\n# connection string, eg:\n# conn = sqlitecloud.connect(\"sqlitecloud://myhost.sqlite.cloud:8860/mydatabase?apikey=myapikey\")\ndb_name = \"chinook.sqlite\"\nconn.execute(f\"USE DATABASE {db_name}\")\n\ncursor = conn.execute(\"SELECT * FROM albums WHERE AlbumId = ?\", (1, ))\nresult = cursor.fetchone()\n\nprint(result)\n\nconn.close()\n```\n\n## sqlitecloud loves sqlite3\n\nIs your project based on the `sqlite3` library to interact with a SQLite database?\n\nJust install `sqlitecloud` package from `pip` and change the module name! That's it!\n\nTry it yourself:\n\n```python\n# import sqlitecloud\nimport sqlite3\n\n# comment out the following line...\nconn = sqlite3.connect(\":memory:\")\n\n# ... and uncomment this line and import the sqlitecloud package\n# (add the database name like in this connection string)\n# conn = sqlitecloud.connect(\"sqlitecloud://myhost.sqlite.cloud:8860/mydatabase.sqlite?apikey=myapikey\")\n\nconn.execute(\"CREATE TABLE IF NOT EXISTS producers (ProducerId INTEGER PRIMARY KEY, name TEXT, year INTEGER)\")\nconn.executemany(\n    \"INSERT INTO producers (name, year) VALUES (?, ?)\",\n    [(\"Sony Music Entertainment\", 2020), (\"EMI Music Publishing\", 2021)],\n)\n\ncursor = conn.execute(\"SELECT * FROM producers\")\n\nfor row in cursor:\n    print(row)\n```\n\n## SQLite Cloud for SQLAlchemy (beta)\n\n_This is an initial release, features and stability may not be guaranteed in all scenarios._\n\n_If you encounter any bugs or issues, please feel free to open an issue on our GitHub repository._\n\nWe’ve implemented the initial support for `sqlitecloud` with [SQLAlchemy](https://www.sqlalchemy.org/), allowing you to utilize all standard SQLAlchemy operations and queries.\nFor further information, please see the dedicated [REDAME](https://github.com/sqlitecloud/sqlitecloud-py/tree/main/sqlalchemy-sqlitecloud).\n\n### Example\n\n_The example is based on `chinook.sqlite` databse on SQLite Cloud_\n\nInstall the package:\n\n```bash\n$ pip install sqlalchemy-sqlitecloud\n```\n\n\n```python\nimport sqlalchemy\nfrom sqlalchemy import Column, ForeignKey, Integer, String\nfrom sqlalchemy.dialects import registry\nfrom sqlalchemy.orm import backref, declarative_base, relationship, sessionmaker\n\nBase = declarative_base()\n\n\nclass Artist(Base):\n    __tablename__ = \"artists\"\n\n    ArtistId = Column(\"ArtistId\", Integer, primary_key=True)\n    Name = Column(\"Name\", String)\n    Albums = relationship(\"Album\", backref=backref(\"artist\"))\n\n\nclass Album(Base):\n    __tablename__ = \"albums\"\n\n    AlbumId = Column(\"AlbumId\", Integer, primary_key=True)\n    ArtistId = Column(\"ArtistId\", Integer, ForeignKey(\"artists.ArtistId\"))\n    Title = Column(\"Title\", String)\n\n# SQLite Cloud connection string\nconnection_string = \"sqlitecloud://myhost.sqlite.cloud:8860/mydatabase.sqlite?apikey=myapikey\"\n\nengine = sqlalchemy.create_engine(connection_string)\nSession = sessionmaker(bind=engine)\nsession = Session()\n\nname = \"John Doe\"\nquery = sqlalchemy.insert(Artist).values(Name=name)\nresult_insert = session.execute(query)\n\ntitle = \"The Album\"\nquery = sqlalchemy.insert(Album).values(\n    ArtistId=result_insert.lastrowid, Title=title\n)\nsession.execute(query)\n\nquery = (\n    sqlalchemy.select(Artist, Album)\n    .join(Album, Artist.ArtistId == Album.ArtistId)\n    .where(Artist.ArtistId == result_insert.lastrowid)\n)\n\nresult = session.execute(query).fetchone()\n\nprint(\"Artist Name: \" + result[0].Name)\nprint(\"Album Title: \" + result[1].Title)\n\n```\n\n\n## SQLite Cloud for Pandas DataFrame\n\n[Pandas](https://pypi.org/project/pandas/) is a Python package for data manipulation and analysis. It provides high-performance, easy-to-use data structures, such as DataFrame.\n\nUse the connection to SQLite Cloud to:\n- Insert data from a DataFrame into a SQLite Cloud database.\n- Query SQLite Cloud and fetch the results into a DataFrame for further analysis.\n\nExample:\n\n```python\nimport io\n\nimport pandas as pd\n\nimport sqlitecloud\n\ndfprices = pd.read_csv(\n    io.StringIO(\n        \"\"\"DATE,CURRENCY,PRICE\n    20230504,USD,201.23456\n    20230503,USD,12.34567\n    20230502,USD,23.45678\n    20230501,USD,34.56789\"\"\"\n    )\n)\n\nconn = sqlitecloud.connect(\"sqlitecloud://myhost.sqlite.cloud:8860/mydatabase.sqlite?apikey=myapikey\")\n\nconn.executemany(\"DROP TABLE IF EXISTS ?\", [(\"PRICES\",)])\n\n# Write the dataframe to the SQLite Cloud database as a table PRICES\ndfprices.to_sql(\"PRICES\", conn, index=False)\n\n# Create the dataframe from the table PRICES on the SQLite Cloud database\ndf_actual_prices = pd.read_sql(\"SELECT * FROM PRICES\", conn)\n\n# Inspect the dataframe\nprint(df_actual_prices.head())\n\n# Perform a simple query on the dataframe\nquery_result = df_actual_prices.query(\"PRICE \u003e 50.00\")\n\nprint(query_result)\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqlitecloud%2Fsqlitecloud-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsqlitecloud%2Fsqlitecloud-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqlitecloud%2Fsqlitecloud-py/lists"}