[Free] Baserow Database - An Airtable Alternative

Baserow Database

Hello everyone, I hope you're all good. Today I am launching a database extension for Baserow. It is an open source database and an Airtable alternative. This database bring all features that Airtable brings. This extension helps you to strore and get data with Baserow. This extension have mostly same block as of Airtable have. That's why it is easy to use and customise. This extension allow you to store almost all languages(I have tried only with Hindi , English and Vietnamese and Turkish) and it stores these languages.

Thanks @michael_ngo for sponsoring this extension.

Let's see its blocks and thier documentation.

All Blocks

Properties

image

Documenation

There are 9 events , 12 methods and 16 properties blocks.

image
This event raises when a column got. Values is a list of data and response is a JSON body that is return by baserow.

image
This event raises rows are got. Response content will be a JSON body that is returned by server and total rows will be number.

image
This event raises when a particular row got. Values is a list of cells that is return by server.

image

This event raises when name of all columns are got. Names is a list of all columns name that you table contains.

image

This event raises when you use Create Row block and row is created in your table. Response will be a JSON body returned by the server.

image

This event raises when a row or cell is updated. Response will be a JSON body returned by the server.

image

This event raises when any error occurs.

image

This event raises when a row is deleted. If the row is deleted then response variable will return Row Deleted.

image

This event raises when a row is moved to a particular index. Response will be a JSON body returned by the server.

image

This block helps you to create a row in table. Columns names and values must be list. If you entered any value wrong in column name then baserow will store null value to that row. If the row is created then Row Created event will be triggered.

image

This block helps you to get the column with column name and a limit that you want to recieve. Note:- Baserow has a limit of 200 maximum records so if you tried to get more than 200 then Error Occurred event will be triggered.

image

This block helps you to get all the columns names and fields id that your table contains. GotColumnsNames event will be trieggered with a list of all cloumns names.

image

This block helps you to fetch a particular row in your table. Got Row event will be triggered with a list of all values ot that row.

image
This block helps you to delete a particular row from your table. RowDeleted event will be triggered if row deleting success.

image
This block will helps you to fetch the data with given filter. Filter will be applied to the given field id with max record. Value accept the Filter valoue. For ex, if you’re using euqal filter then the value should be the string that you want to fing equal to. If not needed then you can leave it as an empty string. Got All Rows event will be triggered when the block got the values.

image

This block helps you to fetch such rows that contains given text. for ex, I have three rows in my table

Firstname Lastname Age
Jill Smith 50
Eve Jackson 94
John Doe 80

And I used this block and searched Jill then the first row will be fetched and GotAllRows event will be triggered and if you searched j then all the rows will be fecthed as all row contains J letter in their cells. It is a type of filter that Baserow offers.

image

This block helps you to fetch all the rows of table with a limit size. GotAllRow event will be triggered with a JSON response body and a integer that contains total number of the rows present in your table.

image

This block helps you to move a particular row to a particular index. for ex I have three rows with id 1,2,3

ID Firstname Lastname Age
1 Jill Smith 50
2 Eve Jackson 94
3 John Doe 80

If I want to move the last row to the top of the table then I wills imply pass the id of the last row to row Id parameter and first row's id to before Id parameter then the updated result will be like below.

ID Firstname Lastname Age
3 John Doe 80
1 Jill Smith 50
2 Eve Jackson 94

RowMoved event will be triggered with a JSON response body. I hope you got this.

image

This block fetches the all row in ascending or descending order of a particular column. column Name parameter accept the column name that you want to filter. And technique parameter accept string in which order you want to filter the row, There are two properties avaliable for technique.

for exampe,

ID Firstname Lastname Age
1 Jill Smith 50
2 Eve Jackson 94
3 John Doe 80

If you want to fetch the rows in ascending order of age simply pass the Ascending property to technique parameter and Age to column Name parameter. And the data will be fetched in acsending order of Age column like this.

ID Firstname Lastname Age
1 Jill Smith 50
3 John Doe 80
2 Eve Jackson 94

GotAllRows event will be triggered with a JSON response body and total number of the rows of table. I hope you got this.

image

This block helps you to set or update the cell of a particular row of given id, column Name and the cell value. Row Updated event will be triggered when it will updated.

image

This block helps you to extract the list of a particular column by response received from the events.
For example, if you have a response received by the Got All Row event.

{
    "count": 1024,
    "next": "https://api.baserow.io/api/database/rows/table/4946/?page=2",
    "previous": null,
    "results": [
        {
            "id": 0,
            "order": "1.00000000000000000000",
            "Name": "string",
            "Last name": "string"
        },
        {
            "id": 0,
            "order": "1.00000000000000000000",
            "Name": "string",
            "Last name": "string"
        }
    ]
}

If you want to get all the names from this json response then simply pass this json text to response parameter and Name to column Name. And the block will return you the list of all names.

image )

Two properties for defining the techique while fetching rows with technique.

image

This block is for setting or getting the Table ID.

image

This block is for setting and getting the token. It is main thing for authenticating with your database. You need to generate it within your account.

image

A property for setting the URL for self hosting. If you are not using self host then ignore it.

image

These are the available properties for defining the filters. You can see here the usage of filters in docs.

I hope you understood the documentation.

Usage

Let see usage of blocks

Creating a Row

image
Make sure to enter the token and table id before you use any block.

Response

{
   "id":3,
   "order":"1.00000000000000000000",
   "Name":"Sumit",
   "Last name":"Kumar"
}

Creating row with Hindi language

image

You can also use other languages for string data.

Response

{
   "id":4,
   "order":"2.00000000000000000000",
   "Name":"सुमित",
   "Last name":"कुमार"
}

Creating row with Turkish language

image

Response

{
   "id":6,
   "order":"4.00000000000000000000",
   "Name":"ç, ş , ö , ü , ı ,ğ",
   "Last name":"Turkish"
}

Creating row with Vietnamese language

image

Response

{  
   "id":5,
   "order":"3.00000000000000000000",
   "Name":"Tôi là người việt nam",
   "Last name":"Vietnamese"
}

Filtering the Data

image
Filter will be applied to the given field id with max record. Value accept the Filter valoue. For ex, if you’re using euqal filter then the value should be the string that you want to fing equal to. If not needed then you can leave it as an empty string. Got All Rows event will be triggered when the block got the values.

Getting the Data

image

I have tried here getting data of Hindi language for showing you.

Response
I recieved a list of values in Hindi (सुमित कुमार).

Searching Data

image

There are two rows in which one of them contain S letter so I am going to search it

Response

{
   "count":1,
   "next":null,
   "previous":null,
   "results":[
      {
         "id":3,
         "order":"1.00000000000000000000",
         "Name":"Sumit",
         "Last name":"Kumar"
      }
   ]
}

Important Note

There are some important thing that you must know before going to use it.

Row Id != Row Number. Mean row id is given by baserow database when you create the rows. And it is the unique identity of a row. For ex, first row of your table's Id will be 1 if you delete it then the next newly created row's Id will be 2 not 1. So make sure to use correct I'd while updating and fetching the data. You can extract the row id of the newly created row from the JSON response received from Row Created event

You can use dictionary block for decoding the responses received by the event blocks.

Download

Credit

Thanks to @shreyash for his super powerful :muscle:Rush .

Suggestion and issue are welcome

More filters and features are coming in future so Get ready for it.

If you like the extension then like the topic
Thank You All

Donate
If you like my work then donate if you can :slightly_smiling_face:.

9 Likes

I have tested the extension and it is working great. I know this can be done with the webcomponent, but for a lot of users this will make it much easier to use.

3 Likes

Nice extension! :slight_smile:

Little sample. I made a project with a button and listview.

This is the baserow database
Selection_1108

With this code I add a row to the database and add the Name value to the listview.

After pressing an item on the listview i search for the text in the database


image

When the item is found the GotallRows blocks is executed where the item is removed from the database and the listview.

5 Likes

Version 4

Version 4 of the extension is released.

What’s New

  • A lot of blocks has been added to this update.
  • Extension is now able to upload file from device to baserow server.

Bug Fixed

  • Error occured block is not showing errors correctly, it has not fixed

Blocks

image
This event raises when file uploaded success with a response and file name and url. File name and file url can be extracted from the JSON response. There are a lot of detalis about files returned in response paramter from baserow server

image
This event raises when the token is generated. It will give your email address and token in response.

image

This event raises when token is validated. isValid returns true if the token is valid.

image

These two block will help you to upload a file from device or a direct url of the file. Upload file block with path paramter works same as clloudinary component works.

token parameter accept a JWT token. Baserow need JWT authorization for uploading the files to server. A single generated token will be valid for only 60 minute so You will need to generate a new token in every 60 second that is not the recommended way. It will not work with toke key that you generates on your token panel. You can generate it with GenerateToken block.(This block is not recommended to use in public apps) .

image

This block helps you to generate the JWT token for using in upload file features. This requires your account email and password.
This block is not recommended to use in public apps. Use it in admin app and save the generated token in an database then use it in your pubic app after fetching the saved token.
TokenGenerated block will be trieggered when the token will be generated.

image

This block refresh the old token to a new one(will be valid for 1 hour). Make sure the old token must be valid. TokenGenerated event will be trieggered with a new token.

image

This block validates the given token. TokenValidated event will be reaised with true if the token is valid otherwise false.

Block Changed

image

responseCode parameter has added to the Error Occurred block. With response code you can find the error cause own. For ex, If response code is 401 then it mean you are not authorized or your token is not valid or expired.

How to Use

How to generate the token

image

You will just need to pass your email address and password to the block and then Token Generated event will be raised with a token.

You can save it now to a global variable for using it.

Let see how to use the new upload files blcoks.

Upload the file by URL

  • You need to generate the token first for uploading the file.
  • You must have a direct url of the file that you are uploading.

I am going to upload an extension by its direct drive url.

image

Response

After file uploaded I recieved a response from File Uploaded block that contains all details of the file.

{
   "size":115564,
   "mime_type":"",
   "is_image":false,
   "image_width":null,
   "image_height":null,
   "uploaded_at":"2021-08-23T16:15:43.057906Z",
   "url":"https://baserow-media.ams3.digitaloceanspaces.com/user_files/Pq106A58a5om3YNdLoNjtFoIwIqQNJoy_b6ae3da634f462e90cda2a5670ddd3491b148528c8aff414e4b000dcc1ed9097.",
   "thumbnails":null,
   "name":"Pq106A58a5om3YNdLoNjtFoIwIqQNJoy_b6ae3da634f462e90cda2a5670ddd3491b148528c8aff414e4b000dcc1ed9097.",
   "original_name":"uc?id=1k6uKbgPwgttzMOobitSgEWuiIlBEhfUh&export=download"
}

Upload file from the device

Now I will upload an image selected by image picker component. We just have to give the path of the file to path paramter and file will start to upload.

Response

{
   "size":1287489,
   "mime_type":"image/jpeg",
   "is_image":true,
   "image_width":3280,
   "image_height":1476,
   "uploaded_at":"2021-08-22T11:12:25.028537Z",
   "url":"https://baserow-media.ams3.digitaloceanspaces.com/user_files/0NoJR6nsfSsVuko3qsUOBUFi2g6HUHLb_9894cefa70ae5e9565b83d62864576465da1128a1d316ed43a44da3be94b7af5.jpg",
   "thumbnails":{
      "tiny":{
         "url":"https://baserow-media.ams3.digitaloceanspaces.com/thumbnails/tiny/0NoJR6nsfSsVuko3qsUOBUFi2g6HUHLb_9894cefa70ae5e9565b83d62864576465da1128a1d316ed43a44da3be94b7af5.jpg",
         "width":null,
         "height":21
      },
      "small":{
         "url":"https://baserow-media.ams3.digitaloceanspaces.com/thumbnails/small/0NoJR6nsfSsVuko3qsUOBUFi2g6HUHLb_9894cefa70ae5e9565b83d62864576465da1128a1d316ed43a44da3be94b7af5.jpg",
         "width":48,
         "height":48
      }
   },
   "name":"0NoJR6nsfSsVuko3qsUOBUFi2g6HUHLb_9894cefa70ae5e9565b83d62864576465da1128a1d316ed43a44da3be94b7af5.jpg",
   "original_name":"IMG_20210607_204334.jpg"
}

If we uploads an image then we get it two thumbnail size image url and its normal image url.
I hope you understood all thing now.

I hope you liked and enjoyed the new update
I have sent the latest extension to their email. Notify me by PM if I forget you.

Cheers
Sumit

1 Like

Now this extension is free to everyone :smiley: . Downloads links are added in the above on topic.

Latest Version : 1.4.0 (Released Today)
Release Date : 2021-08-02T18:30:00Z

Thanks @Jerin_Jacob for his wonderful platform.


Thank You All
Sumit :wink:

2 Likes

Great you made it free :+1: :+1: :+1: :+1:

Can you tell what the changes are from the previous version?

1 Like

Why GetRow not working in my project, but UpdateRow and GetAllRows are working ?

hey i think i got confused. is this an ai or a database?

I don't know what is "ai". It's a database connection extension for baserow database.