python - 使用 pyodbc & SQL Server,如何插入外键
问题描述
我有两个表,区域(ID,省,国家)和地址(地址1,地址2,城市,区域ID)。使用 pyodbc,我首先插入了我的 Region 表,没有任何问题。我现在正试图弄清楚如何在插入地址表期间插入 FK_RegionID。
这是功能代码,没有提到插入RegionID(相交部分是不允许插入重复行):
cursor.execute(("""
IF NOT EXISTS (
SELECT @address1, @address2, @city
INTERSECT
SELECT address1, address2, city
FROM dbo.Address)
BEGIN
INSERT INTO dbo.Address (address1, address2, city)
VALUES (@address1, @address2, @city)
END""")
理想情况下,我会在我的插入中添加一个查询,例如(SELECT RegionID FROM dbo.Region WHERE province=@province AND country=@country)
. 但是,这是行不通的。
...
BEGIN
INSERT INTO dbo.Address (address1, address2, city, RegionID)
VALUES (@address1, @address2, @city, SELECT...WHERE...)
END""")
我还看到可以使用fetchall()
,但我不知道该怎么做,以及插入地址表需要多长时间。任何帮助表示赞赏。
解决方案
Select 在 VALUES 子句中可能不起作用,但您可以将值添加到 SELECT 列表中,如下所示:
...
BEGIN
INSERT INTO dbo.Address (address1, address2, city, RegionID)
SELECT @address1, @address2, @city, RegionID
FROM dbo.Region
WHERE province=@province AND country=@country)
END""")
推荐阅读
- html - 是什么导致我的网站加载延迟?
- python - 将pandas DataFrame或经纬度列表转换为python中的gpx文件
- uwp - 创建混合现实 3D 图标时,如何解决 package.appxmanifest 中的命名空间错误?
- python - how to check if an element equals to specific index of multidimensional list
- python - 将日期范围行拆分为年份(取消分组) - Python Pandas
- php - 如何在 NodeJS 应用程序中验证 PHP 哈希密码
- web-services - Creating new customer from API doesn't set the Associations group id
- python - Tkinter 单选按钮奇怪的外观
- c++11 - RabbitMQ - SimpleAmqpClient - 我正在尝试将标头与我的消息一起发送,但标头没有被发送;我究竟做错了什么?
- asp.net-core - Authorization not working, It does not forbidden users to access my actions in asp.net core