[Tutor] sqlite3 making a spurious duplicate?

Peter Otten __peter__ at web.de
Tue Apr 18 04:15:24 EDT 2017


Marilyn Davis wrote:

> #!/usr/bin/env python3
> """
> Hello Tutors,
> 
> I can't figure out why the FillWithStars() function puts Canopus in the db
> twice.
> 
> What am I missing?
> 
> Thank you for any help.
> 
> Marilyn Davis
> 
> p.s. That Reset(db_name) is in there so that you can run it over and over
> if you want.
> 
> ---
> """
> import os, sqlite3, subprocess
> 
> def Reset(db_name):
>     os.system("rm " + db_name)
>     db_process = subprocess.Popen(("sqlite3", db_name),
>                                    stdin=subprocess.PIPE,
>                                    stdout=subprocess.PIPE,
>                                    stderr=subprocess.PIPE)
>     for send in (b'.tables', ):
>         returned = db_process.communicate(send)
>         assert returned == (b'', b'')
> 
> def FillWithStars():
> 
>     with sqlite3.connect("stars.db") as connection:
> 
>         connection.executescript("""
>             CREATE TABLE brightest(
>             name,
>             constellation,
>             apparent_magnitude,
>             absolute_magnitude,
>             distance);
>             INSERT INTO brightest VALUES("Canopus", "Carina", -0.72, -2.5,
> 74);
> """)
> 
>         connection.executemany("INSERT INTO brightest VALUES(?, ?, ?, ?,
>         ?)",
>             [("Arcturus", "Bootes", -0.04, 0.2, 34),])
> 
>         stored_stars = connection.execute("SELECT * FROM BRIGHTEST")

At this point the connection is closed, and it looks like stored_stars is 
still iterable but contains garbage. 

>     for star in stored_stars:
>         print(star)

Try and indent the lines above one more level so that they are executed 
inside the with-suite.

> 
> def main():
>     Reset("stars.db")
>     FillWithStars()
> 
> if __name__ == '__main__':
>     main()
> 
> """Output:
> 
> bash-3.2$ ./why3.py
> ('Canopus', 'Carina', -0.72, -2.5, 74)
> ('Canopus', 'Carina', -0.72, -2.5, 74)
> ('Arcturus', 'Bootes', -0.04, 0.2, 34)
> bash-3.2$
> """
> 
> _______________________________________________
> 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