编写一个程序,联系人数据库会对联系人的资料模块化,分成多个表保存数据, 表与表之间使用 id 关联完整代码
时间: 2024-03-24 10:41:32 浏览: 178
联系人数据库管理系统设计.doc
好的,以下是一个简单的 Python 程序示例,用于演示如何实现联系人数据库模块化、分表保存、使用 id 关联的功能:
```python
import sqlite3
# 定义联系人表结构
contact_table = '''
CREATE TABLE IF NOT EXISTS contacts (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT,
phone TEXT
)
'''
# 定义地址表结构
address_table = '''
CREATE TABLE IF NOT EXISTS addresses (
id INTEGER PRIMARY KEY,
contact_id INTEGER NOT NULL,
street TEXT,
city TEXT,
state TEXT,
zip TEXT,
FOREIGN KEY(contact_id) REFERENCES contacts(id)
)
'''
# 连接数据库
conn = sqlite3.connect('contacts.db')
# 创建联系人表和地址表
conn.execute(contact_table)
conn.execute(address_table)
# 定义函数用于添加联系人
def add_contact(name, email=None, phone=None):
# 插入联系人数据到 contacts 表
cursor = conn.cursor()
cursor.execute('INSERT INTO contacts (name, email, phone) VALUES (?, ?, ?)', (name, email, phone))
contact_id = cursor.lastrowid
conn.commit()
cursor.close()
return contact_id
# 定义函数用于添加地址
def add_address(contact_id, street=None, city=None, state=None, zip=None):
# 插入地址数据到 addresses 表
cursor = conn.cursor()
cursor.execute('INSERT INTO addresses (contact_id, street, city, state, zip) VALUES (?, ?, ?, ?, ?)', (contact_id, street, city, state, zip))
conn.commit()
cursor.close()
# 添加几个联系人和地址
john_id = add_contact('John Doe', 'john@example.com', '555-1234')
add_address(john_id, '123 Main St', 'Anytown', 'CA', '12345')
jane_id = add_contact('Jane Smith', 'jane@example.com')
add_address(jane_id, '456 Oak Ave', 'Somewhere', 'NY', '67890')
# 查询联系人和地址
cursor = conn.cursor()
cursor.execute('SELECT contacts.name, addresses.street, addresses.city, addresses.state, addresses.zip FROM contacts JOIN addresses ON contacts.id = addresses.contact_id')
rows = cursor.fetchall()
for row in rows:
print(row)
# 关闭连接
conn.close()
```
在这个示例中,我们使用 SQLite 数据库来保存联系人和地址数据。程序中定义了两个表,分别为 contacts 和 addresses,联系人表保存联系人的姓名、电子邮件和电话号码,地址表保存联系人的地址信息。这两个表之间使用 contact_id 字段进行关联。
程序中定义了两个函数,一个用于添加联系人,另一个用于添加地址。我们可以通过这两个函数向数据库中插入数据。在本例中,我们添加了两个联系人 John Doe 和 Jane Smith,每个联系人都有一个地址。最后,我们从数据库中查询了联系人和地址信息,并将其输出到控制台。
请注意,这只是一个简单的示例程序,您可以根据自己的需要进行修改和扩展。
阅读全文