Dputsql
Create 'CREATE TABLE' and 'INSERT INTO...VALUES' SQL statements from R objects
Install / Use
/learn @daranzolin/DputsqlREADME
dputsql
<!-- badges: start --> <!-- badges: end -->The goal of dputsql is to create CREATE TABLE and INSERT INTO SQL
statements directly from objects within R. No DBI connection required.
Outputs have not been exhaustively tested against numerous engines.
Works mostly with SQLite and MySQL formatting.
Installation
You can install the development version of dputsql like so:
remotes::install_github("daranzolin/dputsql")
Example
The simplest use to call dputsql on any dataframe:
library(dputsql)
dputsql(mtcars)
#> CREATE TABLE IF NOT EXISTS x (
#> mpg numeric,
#> cyl numeric,
#> disp numeric,
#> hp numeric,
#> drat numeric,
#> wt numeric,
#> qsec numeric,
#> vs numeric,
#> am numeric,
#> gear numeric,
#> carb numeric
#> );
#>
#> INSERT INTO x (`mpg`, `cyl`, `disp`, `hp`, `drat`, `wt`, `qsec`, `vs`, `am`, `gear`, `carb`) VALUES
#> (21,6,160,110,3.9,2.62,16.46,0,1,4,4),
#> (21,6,160,110,3.9,2.875,17.02,0,1,4,4),
#> (22.8,4,108,93,3.85,2.32,18.61,1,1,4,1),
#> (21.4,6,258,110,3.08,3.215,19.44,1,0,3,1),
#> (18.7,8,360,175,3.15,3.44,17.02,0,0,3,2),
#> (18.1,6,225,105,2.76,3.46,20.22,1,0,3,1),
#> (14.3,8,360,245,3.21,3.57,15.84,0,0,3,4),
#> (24.4,4,146.7,62,3.69,3.19,20,1,0,4,2),
#> (22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2),
#> (19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4),
#> (17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4),
#> (16.4,8,275.8,180,3.07,4.07,17.4,0,0,3,3),
#> (17.3,8,275.8,180,3.07,3.73,17.6,0,0,3,3),
#> (15.2,8,275.8,180,3.07,3.78,18,0,0,3,3),
#> (10.4,8,472,205,2.93,5.25,17.98,0,0,3,4),
#> (10.4,8,460,215,3,5.424,17.82,0,0,3,4),
#> (14.7,8,440,230,3.23,5.345,17.42,0,0,3,4),
#> (32.4,4,78.7,66,4.08,2.2,19.47,1,1,4,1),
#> (30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2),
#> (33.9,4,71.1,65,4.22,1.835,19.9,1,1,4,1),
#> (21.5,4,120.1,97,3.7,2.465,20.01,1,0,3,1),
#> (15.5,8,318,150,2.76,3.52,16.87,0,0,3,2),
#> (15.2,8,304,150,3.15,3.435,17.3,0,0,3,2),
#> (13.3,8,350,245,3.73,3.84,15.41,0,0,3,4),
#> (19.2,8,400,175,3.08,3.845,17.05,0,0,3,2),
#> (27.3,4,79,66,4.08,1.935,18.9,1,1,4,1),
#> (26,4,120.3,91,4.43,2.14,16.7,0,1,5,2),
#> (30.4,4,95.1,113,3.77,1.513,16.9,1,1,5,2),
#> (15.8,8,351,264,4.22,3.17,14.5,0,1,5,4),
#> (19.7,6,145,175,3.62,2.77,15.5,0,1,5,6),
#> (15,8,301,335,3.54,3.57,14.6,0,1,5,8),
#> (21.4,4,121,109,4.11,2.78,18.6,1,1,4,2);
For more control, you can create the table and specify constraints like so:
library(charlatan)
suppressPackageStartupMessages(library(tidyverse))
df <- ch_generate("name", "job", "phone_number", "currency", "color_name") |>
mutate(id = row_number(), .before = 1) |>
mutate(varx = sample(1:100, 10))
df |>
create_table() |>
primary_key("id") |>
not_null(c("name", "job")) |>
unique_vals(c("phone_number", "job")) |>
default_vals(list(currency = "ENG")) |>
check_vals(list(varx = "varx > 0")) |>
add_insert_statement()
#> CREATE TABLE IF NOT EXISTS df (
#> id integer PRIMARY KEY,
#> name text NOT NULL,
#> job text NOT NULL UNIQUE,
#> phone_number text UNIQUE,
#> currency text DEFAULT ENG,
#> color_name text,
#> varx integer CHECK(varx > 0)
#> );
#>
#> INSERT INTO df (`id`, `name`, `job`, `phone_number`, `currency`, `color_name`, `varx`) VALUES
#> (1,'Mr. Darold Trantow IV','Designer, interior/spatial','1-247-551-1720x4089','ZAR','Fuchsia',56),
#> (2,'Philo Gulgowski DDS','Musician','703.698.8590x0651','SHP','Aqua',53),
#> (3,'Almyra Runolfsson','Doctor, general practice','429.448.7165x96196','DKK','LightPink',72),
#> (4,'Dr. Jim Bailey DDS','Bookseller','263-534-7400','NPR','Cornsilk',17),
#> (5,'Mrs. Kailyn Bode DVM','Nutritional therapist','1-109-195-9233x75019','BZD','CornflowerBlue',35),
#> (6,'Emilio Volkman','Journalist, magazine','006-968-2239x230','PGK','BlueViolet',67),
#> (7,'Jeffry Kulas','Veterinary surgeon','1-553-623-5959','AOA','DarkSeaGreen',31),
#> (8,'Kennth Schulist','Statistician','1-925-014-7928x4579','NGN','Coral',28),
#> (9,'Eulah Paucek','Call centre manager','253-968-7770x579','OMR','LightSalmon',29),
#> (10,'Anastacio Gutkowski','Animal technologist','064-719-7466','PAB','MintCream',100);
Write the output to a file, or send it to your clipboard:
dputsql(mtcars) |>
write_ddl_file("CREATE.sql")
dputsql(mtcars) |>
ddl_to_clipboard()
Related Skills
feishu-drive
344.4k|
things-mac
344.4kManage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database)
clawhub
344.4kUse the ClawHub CLI to search, install, update, and publish agent skills from clawhub.com
postkit
PostgreSQL-native identity, configuration, metering, and job queues. SQL functions that work with any language or driver
