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()