mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 18:28:49 +00:00 
			
		
		
		
	 287b84de93
			
		
	
	
		287b84de93
		
	
	
	
	
		
			
			The sqlit3.Connection object doesn't call its close() method when it's used as a context manager.
		
			
				
	
	
		
			20 lines
		
	
	
	
		
			717 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			20 lines
		
	
	
	
		
			717 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| import sqlite3
 | |
| 
 | |
| con = sqlite3.connect(":memory:")
 | |
| con.execute("create table person (id integer primary key, firstname varchar unique)")
 | |
| 
 | |
| # Successful, con.commit() is called automatically afterwards
 | |
| with con:
 | |
|     con.execute("insert into person(firstname) values (?)", ("Joe",))
 | |
| 
 | |
| # con.rollback() is called after the with block finishes with an exception, the
 | |
| # exception is still raised and must be caught
 | |
| try:
 | |
|     with con:
 | |
|         con.execute("insert into person(firstname) values (?)", ("Joe",))
 | |
| except sqlite3.IntegrityError:
 | |
|     print("couldn't add Joe twice")
 | |
| 
 | |
| # Connection object used as context manager only commits or rollbacks transactions,
 | |
| # so the connection object should be closed manually
 | |
| con.close()
 |