[Tutor] How to test for the existence of a table in a sqlite3 db?
srinivas devaki
mr.eightnoteight at gmail.com
Sat Oct 14 02:27:05 EDT 2017
SQL has "CREATE TABLE IF NOT EXISTS"
so you change your instructions to
```python
import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("""
CREATE TABLE IF NOT EXISTS BloodPressureReadings (
ReadingID INTEGER PRIMARY KEY,
Date TEXT,
Time TEXT,
SystolicBP INTEGER,
DiastolicBP INTEGER,
Comments TEXT);
""")
c.execute("SELECT * FROM BloodPressureReadings")
```
On Sat, Oct 14, 2017 at 11:13 AM boB Stepp <robertvstepp at gmail.com> wrote:
>
> I want to use Alan's (and others') idea to run a SQL file to create a
> table if that table does not exist. Alan suggested using
> executescript() to do this. I misunderstood Alan and thought that
> this would take a filename and execute it. Instead, it appears that I
> must pass to it a string which is a SQL script. So after lots of
> fooling around in the interpreter I arrived at:
>
> py3: import sqlite3
> py3: conn = sqlite3.connect(':memory:')
> py3: c = conn.cursor()
> py3: try:
> ... c.execute('select * from BloodPressureReadings')
> ... except sqlite3.OperationalError:
> ... with open('create_sqlite3_db.sql') as f:
> ... sql = f.read()
> ... c.executescript(sql)
> ...
> <sqlite3.Cursor object at 0x0000000001E54490>
>
> The file 'create_sqlite3_db.sql' contains:
>
> CREATE TABLE BloodPressureReadings (
> ReadingID INTEGER PRIMARY KEY,
> Date TEXT,
> Time TEXT,
> SystolicBP INTEGER,
> DiastolicBP INTEGER,
> Comments TEXT);
>
> So at this point I am only creating an empty table.
>
> The above "works", but my "try" check is awful! What can I replace it
> with to just see if there is *any* table in the chosen database? In
> the code Peter supplied in the thread, "How is database creation
> normally handled?", he used in his function, "ensure_db(filename)":
>
> cursor.execute("create table if not exists addresses (name, email);")
>
> which is sweet, but I don't see how I can apply this idea if I insist
> on using a SQL file to create my table(s).
>
> BTW, in the docs at https://docs.python.org/3/library/sqlite3.html I
> found no mention of the actual exception I caught, "OperationalError".
> Should not this be in the docs?
>
> --
> boB
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
More information about the Tutor
mailing list