Connect with Python
Connect to PhoenixDB from your Python application using psycopg2 or SQLAlchemy.
Option 1: psycopg2
Install
pip install psycopg2-binaryBasic Connection
db.py
import os
import psycopg2
from psycopg2.extras import RealDictCursor
def query(sql, params=None):
conn = psycopg2.connect(
os.environ['DATABASE_URL'],
cursor_factory=RealDictCursor
)
try:
with conn.cursor() as cur:
cur.execute(sql, params)
if cur.description:
return cur.fetchall()
return None
finally:
conn.close()Usage Example
app.py
from db import query
# Create table
query("""
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
);
""")
# Insert
user = query(
"INSERT INTO users (name, email) VALUES (%s, %s) RETURNING *",
("Jane", "jane@example.com")
)
print(user)
# Select
users = query("SELECT * FROM users")
print(users)Option 2: SQLAlchemy
Install
pip install sqlalchemy psycopg2-binaryDatabase Setup
database.py
import os
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
DATABASE_URL = os.environ['DATABASE_URL']
engine = create_engine(
DATABASE_URL,
connect_args={"sslmode": "require"}
)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()Model Definition
models.py
from sqlalchemy import Column, Integer, String, DateTime
from sqlalchemy.sql import func
from database import Base
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
email = Column(String, unique=True, index=True, nullable=False)
created_at = Column(DateTime(timezone=True), server_default=func.now())Usage with FastAPI
main.py
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from database import get_db, engine, Base
from models import User
Base.metadata.create_all(bind=engine)
app = FastAPI()
@app.get('/users')
def list_users(db: Session = Depends(get_db)):
return db.query(User).all()
@app.post("/users")
def create_user(name: str, email: str, db: Session = Depends(get_db)):
user = User(name=name, email=email)
db.add(user)
db.commit()
db.refresh(user)
return userEnvironment Variable
.env
DATABASE_URL=postgresql://postgres:YOUR_PASSWORD@abc123.server1.phoenixdb.space:5432/mydb?sslmode=require
Load with: pip install python-dotenv andload_dotenv()
Django Configuration
For Django projects, update settings.py:
settings.py
import dj_database_url
DATABASES = {
'default': dj_database_url.config(
default=os.environ.get('DATABASE_URL'),
conn_max_age=600,
ssl_require=True,
)
}Install: pip install dj-database-url