抽象问题:将记录(=表格行)从某些程序导入数据库时,我有时只想导入记录当且仅当记录不存在时在数据库中,基于一些唯一标识符。它更可取:
try ... catch
具体示例:我有一个包含用户列表的数据文件。对于每个用户,我有first name
和last name
。我假设两个人可能没有相同的名字。我想编写一个Python脚本,将数据插入PostgreSQL表中,其列为userid
(自动递增的主键),first_name
(文本)和last_name
(文本)
我想插入用户John Doe
。它更可取:
首先查询数据库以检查数据库中是否已存在具有相同记录的记录,如果没有,则插入记录,例如:
sql = "SELECT COUNT(*) cnt FROM users WHERE first_name = 'John' AND last_name`= 'Doe'"
data = pd.read_sql_query(sql, connection)
if data['cnt'][0]==0:
sql = "INSERT INTO users (first_name, last_name) values ('John','Doe')"
cursor.execute(sql)
connection.commit()
或添加一些unicity constraint in the database(在(first_name, last_name)
上),然后尝试插入记录,被一些try … catch
包围,例如&#34 ;
try:
sql = "INSERT INTO users (first_name, last_name) values ('John','Doe')"
cursor.execute(sql)
connection.commit()
except:
print('The user is already present in database')