Python Psycopg2使用外键创建记录

Python Psycopg2使用外键创建记录,python,sql,database,postgresql,psycopg2,Python,Sql,Database,Postgresql,Psycopg2,我正在运行以下版本的软件: Python 3.5 psycopg2==2.6.1 Postgres 9.4.5 我有两张桌子。表用户有用户ID(序列主键),姓氏,名,性别,出生日期,以及登记日期。表UserProfile具有UserProfileId(serial,PK),UserId(FK),日期输入,FaveNumber和活动。有一对多的关系 下面的PostgreSQL可以工作,并最终在UserProfile中创建一个具有关联用户ID(FK)的记录 如何构建一个psycopg2 cur.e

我正在运行以下版本的软件:

Python 3.5
psycopg2==2.6.1
Postgres 9.4.5
我有两张桌子。表
用户
用户ID(序列主键)
姓氏
性别
出生日期
,以及
登记日期
。表
UserProfile
具有
UserProfileId(serial,PK)
UserId(FK)
日期输入
FaveNumber
活动
。有一对多的关系

下面的PostgreSQL可以工作,并最终在UserProfile中创建一个具有关联用户ID(FK)的记录

如何构建一个psycopg2 cur.execute查询来完成上述PostgreSQL?我已经阅读了文档,但似乎无法理解如何构造此命令

我的出发点是:

cur.execute( \
"""INSERT INTO User \
(LastName, FirstName, Gender, DateOfBirth, DateEnrolled) \
VALUES (%s, %s, %s, %s, %s) RETURNING UserId;""", \
(last_name, first_name, gender, date_of_birth, now(), ??...??)
此外,是否可以从
返回的UserId
中提取该值,以便在以后的查询中使用


谢谢你抽出时间

使用字典传递参数更清晰

cur.execute( \
"""INSERT INTO User \
(LastName, FirstName, Gender, DateOfBirth, DateEnrolled) \
VALUES (%s, %s, %s, %s, %s) RETURNING UserId;""", \
(last_name, first_name, gender, date_of_birth, now(), ??...??)
ins = """
    with ins_user as (
        insert into User (
            LastName, FirstName, Gender, DateOfBirth, DateEnrolled
        ) values (%(last_name)s, %(first_name)s, %(gender)s, %(dob)s, now())
        returning UserId
    )
    insert into UserProfile (
        UserId, DateEntered, FaveNumber, Activity
    ) values ((select UserId from ins_user), now(), %(fave_number)s, %(activity)s)
"""

ins_dict = dict (
    last_name = 'Sara',
    first_name = 'Jackson',
    gender = 'F',
    dob = '1941-1-12',
    fave_number = '3',
    activity = 'volleyball'
)
print cur.mogrify(ins, ins_dict) # inspect the rendered command
cur.execute(ins, ins_dict)
connection.commit()
如果
dateregistered
将始终接收
now()
,则将其设为默认值

DateEnrolled date default now(),

>感谢您的回复。我不知道我可以将字典作为参数传递到cur.execute+1用于将date now()设置为表中的默认值!
ins = """
    with ins_user as (
        insert into User (
            LastName, FirstName, Gender, DateOfBirth, DateEnrolled
        ) values (%(last_name)s, %(first_name)s, %(gender)s, %(dob)s, now())
        returning UserId
    )
    insert into UserProfile (
        UserId, DateEntered, FaveNumber, Activity
    ) values ((select UserId from ins_user), now(), %(fave_number)s, %(activity)s)
"""

ins_dict = dict (
    last_name = 'Sara',
    first_name = 'Jackson',
    gender = 'F',
    dob = '1941-1-12',
    fave_number = '3',
    activity = 'volleyball'
)
print cur.mogrify(ins, ins_dict) # inspect the rendered command
cur.execute(ins, ins_dict)
connection.commit()