将列转换为postgresql数据库

时间:2016-05-23 23:47:46

标签: postgresql psycopg2

假设我有一个相等长度的python列列表(在下面的例子中,每列有4个元素,但在我的实际工作中,每列有大约500多个元素):

col0 = [1, 12, 23, 41]   # also used as a primary key
col1 = ['asdas','asd', '1323', 'adge']
col2 = [true, false, true, true]
col4 = [312.12, 423.1, 243.56, 634.5]

我已经定义了一个postgresql表,列有:Col0(整数,也是主键),Col1(字符变化),Col2(布尔值),Col3(数字)

我编写了以下代码来连接到postgresql数据库(似乎工作正常):

import psycopg2
...
conn = psycopg2.connect("dbname='mydb' user='myuser' host='localhost' password = 'mypwd')
cur = conn.cursor()

现在假设我想将列推送到postgresql表myt,我希望将行填充为:

 Col1  Col2     Col3   Col4
 1     'asdas'  true   312.12
 12    'asd'    false  423.1
 ...

我在SO such as this one上看到了示例,其示例用于从csv文件中读取:

for row in reader:
    cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (variable1, variable2))

(a)我可以为我的案件采用类似的东西吗?这会有用吗?

for i in range(0, len(col0)):
    cur.execute("INSERT INTO myt (Col1, Col2, Col3, Col4) VALUES (%??, %s, %??, %f)", (col0[i], col1[i], col2[i], col3[i]))

(b)如果是,当相应的postgresql类型是整数,布尔值和数字时,python整数,布尔值,浮点类型的类型说明符是什么?

(c)另外,如果我有40个表而不是4个表怎么办?我是否必须写一个这样的长行:

   "INSERT INTO myt (Col1, Col2, ..., Col40) VALUES (%d, %s, ..., %f)", (col0[i], ...))

1 个答案:

答案 0 :(得分:0)

A,B: 是的,这将有效,psycopg2使用%s来表示所有类型,这只是它的工作方式。(所以不要使用%??等...)

C:

"insert into {t} ({c}) values ({v})".format(
   t=tablename,
   c=','.join(columns_list),
   v=','.join(['%'] * len(columns_list))

让您更接近通用插入表达式,但您仍然需要循环...