Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Octo.jl 🐙 is an SQL Query DSL in Julia

License

NotificationsYou must be signed in to change notification settings

wookay/Octo.jl

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DocumentationBuild Status

Octo.jl is an SQL Query DSL inJulia.It also comes with a very useful tool calledRepo.You couldRepo.get,Repo.insert!Repo.update!Repo.delete! for many database drivers without hand-written SQL.

It's influenced byEcto.

SQL Query DSL

julia>using Octo.Adapters.SQLjulia>struct Userendjulia> Schema.model(User, table_name="users")User=>Dict(:primary_key=>"id",:table_name=>"users")julia> u=from(User)FromItem usersjulia> [SELECT* FROM u]SELECT* FROM usersjulia> [SELECT (u.name, u.salary) FROM u]SELECT name, salary FROM usersjulia> [SELECT* FROM u WHERE u.id==2]SELECT* FROM users WHERE id=2julia>to_sql([SELECT* FROM u WHERE u.id==2])"SELECT * FROM users WHERE id = 2"

structured.svg

Repo

Current supported database drivers:

julia>using Octo.Adapters.PostgreSQLjulia> Repo.debug_sql()LogLevelDebugSQL::RepoLogLevel=-1julia> Repo.connect(           adapter= Octo.Adapters.PostgreSQL,           dbname="postgresqltest",           user="postgres",       )PostgreSQL connection (CONNECTION_OK) with parameters:  user= postgres  passfile=/Users/wookyoung/.pgpass  dbname= postgresqltest  port=5432  client_encoding= UTF8  application_name= LibPQ.jl  sslmode= prefer  sslcompression=1  krbsrvname= postgres  target_session_attrs= anyjulia>struct Employeeendjulia> Schema.model(Employee, table_name="Employee", primary_key="ID")Employee=>Dict(:primary_key=>"ID",:table_name=>"Employee")julia> Repo.execute([DROP TABLE IF EXISTS Employee])[ Info: DROP TABLE IF EXISTS Employeejulia> Repo.execute(Raw("""           CREATE TABLE Employee (               ID SERIAL,               Name VARCHAR(255),               Salary FLOAT(8),               PRIMARY KEY (ID)           )"""))┌ Info: CREATE TABLE Employee (│     ID SERIAL,│     NameVARCHAR(255),│     SalaryFLOAT(8),│     PRIMARY KEY (ID)└ )julia> Repo.insert!(Employee, [           (Name="Jeremy",  Salary=10000.50),           (Name="Cloris",  Salary=20000.50),           (Name="John",    Salary=30000.50),           (Name="Hyunden", Salary=40000.50),           (Name="Justin",  Salary=50000.50),           (Name="Tom",     Salary=60000.50),       ])[ Info: INSERT INTO Employee (Name, Salary) VALUES ($1,$2)   (Name="Jeremy", Salary=10000.5), (Name="Cloris", Salary=20000.5), (Name="John", Salary=30000.5), (Name="Hyunden", Salary=40000.5), (Name="Justin", Salary=50000.5), (Name="Tom", Salary=60000.5)julia> Repo.get(Employee,2)[ Info: SELECT* FROM Employee WHERE ID=2|   id| name|    salary||----|--------|---------||2| Cloris|20000.5|1 row.julia> Repo.get(Employee,2:5)[ Info: SELECT* FROM Employee WHERE ID BETWEEN2 AND5|   id| name|    salary||----|---------|---------||2| Cloris|20000.5||3| John|30000.5||4| Hyunden|40000.5||5| Justin|50000.5|4 rows.julia> Repo.get(Employee, (Name="Jeremy",))[ Info: SELECT* FROM Employee WHERE Name='Jeremy'|   id| name|    salary||----|--------|---------||1| Jeremy|10000.5|1 row.julia> Repo.query(Employee)[ Info: SELECT* FROM Employee|   id| name|    salary||----|---------|---------||1| Jeremy|10000.5||2| Cloris|20000.5||3| John|30000.5||4| Hyunden|40000.5||5| Justin|50000.5||6| Tom|60000.5|6 rows.julia> Repo.insert!(Employee, (Name="Jessica", Salary=70000.50))[ Info: INSERT INTO Employee (Name, Salary) VALUES ($1,$2)   (Name="Jessica", Salary=70000.5)julia> Repo.update!(Employee, (ID=2, Salary=85000))[ Info: UPDATE Employee SET Salary=$1 WHERE ID=285000julia> Repo.delete!(Employee, (ID=3,))[ Info: DELETE FROM Employee WHERE ID=3julia> Repo.delete!(Employee,3:5)[ Info: DELETE FROM Employee WHERE ID BETWEEN3 AND5julia> em=from(Employee)FromItem Employeejulia> Repo.query(em)[ Info: SELECT* FROM Employee|   id| name|    salary||----|---------|---------||1| Jeremy|10000.5||6| Tom|60000.5||7| Jessica|70000.5||2| Cloris|85000.0|4 rows.julia> Repo.query([SELECT* FROM em WHERE em.Name=="Cloris"])[ Info: SELECT* FROM Employee WHERE Name='Cloris'|   id| name|    salary||----|--------|---------||2| Cloris|85000.0|1 row.julia> Repo.query(em, (Name="Cloris",))[ Info: SELECT* FROM Employee WHERE Name='Cloris'|   id| name|    salary||----|--------|---------||2| Cloris|85000.0|1 row.julia>= Octo.PlaceHolderPlaceHolderjulia> Repo.query([SELECT* FROM em WHERE em.Name== ❓], ["Cloris"])[ Info: SELECT* FROM Employee WHERE Name=$1"Cloris"|   id| name|    salary||----|--------|---------||2| Cloris|85000.0|1 row.

Subqueries

julia> sub=from([SELECT* FROM em WHERE em.Salary>30000],:sub)SubQuery (SELECT* FROM Employee WHERE Salary>30000) AS subjulia> Repo.query(sub)[ Info: SELECT* FROM Employee WHERE Salary>30000|   id| name|    salary||----|---------|---------||6| Tom|60000.5||7| Jessica|70000.5||2| Cloris|85000.0|3 rows.julia> Repo.query([SELECT sub.Name FROM sub])[ Info: SELECT sub.Name FROM (SELECT* FROM Employee WHERE Salary>30000) AS sub| name||---------|| Tom|| Jessica|| Cloris|3 rows.

Colored SQL statements

colored_sql_statements.png

Requirements

You needJulia.

julia> type] key

(v1.0) pkg> add Octo
(v1.0) pkg> add LibPQ# for PostgreSQL (depends on LibPQ.jl 1.1, 1.2)(v1.0) pkg> add SQLite# for SQLite (depends on SQLite.jl 1.0)(v1.0) pkg> add MySQL# for MySQL (depends on MySQL.jl 1.0, 1.1)(v1.0) pkg> add ODBC# for ODBC (depends on ODBC.jl 1.0)(v1.0) pkg> add JDBC# for JDBC (depends on JDBC.jl ≥ 0.5.0)

About

Octo.jl 🐙 is an SQL Query DSL in Julia

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

    Packages

    No packages published

    Contributors3

    •  
    •  
    •  

    Languages


    [8]ページ先頭

    ©2009-2025 Movatter.jp