PlanetScale provide a hosted MySQL database with 5GB
of storage included in the free tier .
1. Sign up to PlanetScale
Go to
https://auth.planetscale.com/sign-up
2. Create a new database
Select New database on the dashboard.
Create a database.
3. Create a password
Go to Settings → Passwords and click New password .
Save the host
, username
, and password
values as
Val Town environment variables - use
planetScaleHost
, planetScaleUsername
, and planetScalePassword
respectively.
4. Create your first table
Copy and paste this val to create a table with the given schema.
import process from " node:process " ;
import { queryPlanetScale } from " https://esm.town/v/vtdocs/queryPlanetScale " ;
export const planetScaleCreateStockTable = queryPlanetScale (
{
host: process . env . planetScaleHost ,
username: process . env . planetScaleUsername ,
password: process . env . planetScalePassword ,
},
` CREATE TABLE stock (
id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
name varchar(255) NOT NULL,
price varchar(255) NOT NULL
); `
);
5. Insert an item
Insert one or more items.
import process from " node:process " ;
import { queryPlanetScale } from " https://esm.town/v/vtdocs/queryPlanetScale " ;
export const planetScaleInsertStockTable = queryPlanetScale (
{
host: process . env . planetScaleHost ,
username: process . env . planetScaleUsername ,
password: process . env . planetScalePassword ,
},
` INSERT INTO stock (name, price) VALUES (?, ?); ` ,
[ " banana " , 15 ]
);
6. Query an item
Use the rows
property to get your query results - or return the entire
results
object to see what other data is available.
import process from " node:process " ;
import { queryPlanetScale } from " https://esm.town/v/vtdocs/queryPlanetScale " ;
export const planetScaleSelectStockTable = ( async () => {
const results = await queryPlanetScale (
{
host: process . env . planetScaleHost ,
username: process . env . planetScaleUsername ,
password: process . env . planetScalePassword ,
},
` SELECT id, name, price FROM stock WHERE name=? ` ,
[ " banana " ]
) ;
return results . rows [ 0 ] ;
} )();
7. Do more than queries!
Read the source of the
@vtdocs/queryPlanetScale
helper, see how it uses the @planetscale/database
SDK, refer to the
driver’s documentation , and extend
it!