Python Forum
Insert into SQL Table only when Table is First Created?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Insert into SQL Table only when Table is First Created?
#1
Hello,

I'm trying to add default values to my SQLite table when it first gets created using and INSERT statement.
Right now, every time I run the program the default values keep getting inserted into the table. So now I have 10 rows of the same values.

Is there a way to program this so the values only get inserted when the table is first created (Table does not exist), and if the table does exist, don't insert those values because they're already there.

Thanks in advance

This is what I have:
#----------------------------------------------------------------------------------------------
#                          Create Category Database
#----------------------------------------------------------------------------------------------
def createCategoryDatabase():
        #Create a database (users.db)
        connection = sqlite3.connect("categories.db")
        cursor = connection.cursor()
 
        table = """CREATE TABLE IF NOT EXISTS Categories
                (ID INTEGER PRIMARY KEY  AUTOINCREMENT,
                Category            TEXT    NOT NULL,
                Low_Quantity_Value  INT     NOT NULL);"""
 
        #Execute the creation of the table
        cursor.execute(table)
        #print("The database has been created")
        #Commit the changes
        connection.commit()
        
        #Add a default category
        cursor.execute('''
        insert into Categories (Category, Low_Quantity_Value)
        values ('N/A','0')
        ''')
        connection.commit()
        
        #Close the connection
        connection.close() 
#----------------------------------------------------------------------------------------------
Reply
#2
(Jun-26-2022, 10:44 PM)Extra Wrote: Is there a way to program this so the values only get inserted when the table is first created (Table does not exist), and if the table does exist, don't insert those values because they're already there.

Have you tried 'SELECT' on said data values, as a test, before running the 'INSERT' statement? The idea being that if 'SELECT' returns 'True', then the data is there and as such you can skip over the 'INSERT'. If it returns 'False' (or possibly, 'Null'), then have the 'INSERT' do its thing.
Sig:
>>> import this

The UNIX philosophy: "Do one thing, and do it well."

"The danger of computers becoming like humans is not as great as the danger of humans becoming like computers." :~ Konrad Zuse

"Everything should be made as simple as possible, but not simpler." :~ Albert Einstein
Reply
#3
Thanks. I will try that.
Reply
#4
If you want to create a table with initial values you should query if the table exists. If the table does not exist you can then create the table and add whatever initial data you want. If the table does exist you do nothing.
tables = cursor.execute(
  """SELECT tableName FROM sqlite_master WHERE type='table'
  AND tableName='Categories'; """).fetchall()
if len(tables) == 0:
    # Create and initialize table.
Reply
#5
I never understood why there is a need for IF NOT EXISTS.

Create a table you need for a purpose. Check first if a table with that name exists.

Once you create a table in your db, unless you will only import data with fixed ids (I do that often), you need to set the initial value for the primary key:

Quote:ALTER TABLE my_table AUTO_INCREMENT = 1;

for example.

The first INSERT query will then take the id value 1. Further INSERT queries will increment id from 1.

Why would you run the same CREATE TABLE again? Not a realistic scenario.
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  drawing a table with the status of tasks in each thread pyfoo 3 424 Mar-01-2024, 09:29 AM
Last Post: nerdyaks
  How to create a table with different sizes of columns in MS word pepe 8 1,585 Dec-08-2023, 07:31 PM
Last Post: Pedroski55
  Trying to get counts/sum/percentages from pandas similar to pivot table cubangt 6 1,426 Oct-06-2023, 04:32 PM
Last Post: cubangt
  dict table kucingkembar 4 741 Sep-30-2023, 03:53 PM
Last Post: deanhystad
  Going through HTML table with selenium emont 3 817 Sep-30-2023, 02:13 AM
Last Post: emont
Thumbs Up Convert word into pdf and copy table to outlook body in a prescribed format email2kmahe 1 763 Sep-22-2023, 02:33 PM
Last Post: carecavoador
  Using pyodbc&pandas to load a Table data to df tester_V 3 830 Sep-09-2023, 08:55 PM
Last Post: tester_V
  Find a string from a column of one table in another table visedwings049 8 1,181 Sep-07-2023, 03:22 PM
Last Post: deanhystad
Question Using SQLAlchemy, prevent SQLite3 table update by multiple program instances Calab 3 760 Aug-09-2023, 05:51 PM
Last Post: Calab
  Color a table cell based on specific text Creepy 11 2,013 Jul-27-2023, 02:48 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020