Python 使用Psycopg2创建多个表
我正在尝试使用psycopg2创建多个(4000)csv文件并将其导入我的postgres数据库。所有csv文件都具有相同的列名和类型。我就是不知道如何高效地订购 Python 3.5,Postgre-9.5.12 问题:Python 使用Psycopg2创建多个表,python,postgresql,psycopg2,Python,Postgresql,Psycopg2,我正在尝试使用psycopg2创建多个(4000)csv文件并将其导入我的postgres数据库。所有csv文件都具有相同的列名和类型。我就是不知道如何高效地订购 Python 3.5,Postgre-9.5.12 问题: .格式工作不正常(未将“%s”替换为sec_名称) 我应该指定要插入的列还是使用copy_from 我可以再简化这个过程吗 import psycopg2 import os conn = psycopg2.connect("dbname=postgres user=po
- .格式工作不正常(未将“%s”替换为sec_名称)
- 我应该指定要插入的列还是使用copy_from
- 我可以再简化这个过程吗
import psycopg2 import os conn = psycopg2.connect("dbname=postgres user=postgres") cur = conn.curser() # file_dir == directory containing all the .csv sec_files = os.listdir("file_dir") for files in sec_files: # Cuts off all whitespace and .csv sec_name = ''.join(files.split())[:-4] cur.execute(''' CREATE TABLE '%s' ( Date NOT NULL UNIQUE DATE PRIMARY KEY col2 FLOAT NOT NULL col3 FLOAT NOT NULL col4 FLOAT NOT NULL col5 FLOAT NOT NULL col6 FLOAT NOT NULL col7 INTEGER NOT NULL )''').format(sec_name) print("Table created ",sec_name) with open(os.path.abspath(files),'r') as f: next(f) for row in reader: cur.copy_from(f,sec_name, sep=',') conn.commit() print('Data inserted into ', sec_name, ' completed')
import os
import psycopg2
from psycopg2.extensions import AsIs
query = """
CREATE TABLE %(table)s (
Date NOT NULL UNIQUE DATE PRIMARY KEY
col2 FLOAT NOT NULL
col3 FLOAT NOT NULL
col4 FLOAT NOT NULL
col5 FLOAT NOT NULL
col6 FLOAT NOT NULL
col7 INTEGER NOT NULL)
"""
sec_files = os.listdir('file_dir')
conn = psycopg2.connect('dbname=postgres user=postgres')
with conn.cursor() as cursor:
for file in sec_files:
name = os.path.basename(file).split('.')[0]
cursor.execute(query, {'table': AsIs(name)})
print('Table created', name)
with open(os.path.abspath(file), 'r') as fin:
next(f)
cursor.copy_from(f, name, sep=',')
print('Data inserted into ', name, ' complete')
不要使用
格式
你很容易被SQL注入,如果你想插入表名,你需要psycopg2.extensions
中的AsIs
模块,你还想创建4000个表吗?似乎有点不对劲……我不明白如何使用psycopg2.extensions.AsIs。是的,4000张。如果你在做4000张桌子,你的设计模式有问题,只是说。。。