我有csv文件,必须将数据复制到postgre表中,如果在我的csv中如果我不输入Id和Updated_at的数据将抛出错误,但它不应该因为Id被标记为默认和增量。我正在从python复制这个副本
CREATE TABLE IF NOT EXISTS public.demographic_types (
id bigint DEFAULT nextval('public.demographic_types_id_seq'::regclass) NOT NULL,
demographic_type text NOT NULL,
updated_at timestamp with time zone DEFAULT now() NOT NULL
);
Python代码
def load_data(conn):
"""
Load seeded data
"""
db = os.environ['DATABASE_URL']
dbname = db.replace("hsdp_pg","harbinger")
try:
with psycopg2.connect(dbname) as conn1:
#migrate_db(conn, dbname, mirth_pw, harbinger_pw, psql_path, init_db)
conn1.commit()
except psycopg2.Error as exp1:
print(exp1)
print ('Error Code: %s. Error %s' % (exp1.pgcode, exp1.pgerror))
print(conn1)
path = os.path.dirname(os.path.realpath(__file__))
print (os.path.join(path,"database/data/*.csv"))
for fle in sorted(glob.glob(os.path.join(path,"database/data/*.csv"))):
print ('>>>Migrating data %s' % fle)
table_name = os.path.basename(fle).replace('.csv', '')
try:
#silent_query(conn, sql, None)
with conn1.cursor() as cur:
#delete data first
print('Deleting data from table %s' % table_name)
cur.execute('TRUNCATE %s CASCADE' % table_name)
print('i am done and waiting')
conn1.commit()
with open(fle, 'r') as f:
#headers = ", ".join(table_column_mapping_data[table_name])
print("i am here ")
#cur.copy_from(f, table_name, sep=',')
#sql = "INSERT INTO %s (ID, demographic_type, updated_at) VALUES (%s,%s,%s)" % table_name
#record_insert = ('1', 'phone', '')
#cur.execute(sql, record_insert)
sql = "COPY %s from STDIN WITH CSV HEADER DELIMITER ','" % table_name
#print(sql)
cur.copy_expert(sql, f)
conn1.commit()
except psycopg2.Error as exp2:
print ('Error Code: %s. Error %s' % (exp2.pgcode, exp2.pgerror))
如果我理解正确的话,您希望从CSV文件导入一些数据,但允许数据库自动用默认值填充一些列(id列的序列的nextval,或者updated_at列的now())。
为此,您必须告诉copy命令CSV文件中有哪些列,如下所示:
for fle in sorted(pathlib.path(path,"database/data/").glob("*.csv")):
logging.info('>>>Migrating data %s', fle)
table_name = fle.stem
try:
with conn1.cursor() as cur:
logging.info('Deleting data from table %s', psycopg2.extensions.quote_ident(table_name))
cur.execute('TRUNCATE %s CASCADE' % psycopg2.extensions.quote_ident(table_name, cur))
logging.info('i am done and waiting')
with open(fle, 'r') as f:
cur.copy_from(
f,
table_name,
sep=',',
columns=[
'demographic_type',
'updated_at',
'street_address',
'city',
'state_or_province',
'postal_code',
'secondary_phone',
# more columns, but without id or created_at
]
)
conn1.commit()
except psycopg2.Error as exp2:
print ('Error Code: %s. Error %s' % (exp2.pgcode, exp2.pgerror))
堆栈溢出。 和 详细信息:失败行包含(18,Item Name在这里,这是描述,40.00,items/pattern.png,lXBjgo70QIrI8aF,1,null)。 这是完整的回溯 null 提前谢谢你
我在postgresql中创建了一个存储过程,如下所示: 是->的类型 我在插入时得到如下错误:
当我打印申请者的技能列表时,我有以下内容: 下面是一张表格,列出了申请人和技能之间的联系: 但是当我试图保存申请者时,我有这样一个提示:失败的行包含(23,null,null,499)。有人能给我解释一下吗?我正在使用jpa注释开发一个spring应用程序。
这是我的代码,但当我尝试插入另一个“analise”时,num\u cedula,num\u doente,data\u analise为NULL,它会给我这个错误(“错误:num\u cedula”列中的NULL值违反了非NULL约束细节:失败的行包含(32,Ortopedia,NULL,NULL,NULL,NULL,2019-12-02,glicemia,176,Instituicao1)。S
我正在使用带有Postgres数据库连接的JBPM6.5.0Final。当我尝试从jbpm-workbench容器开始时,将显示以下错误: 而且还 提前道谢。
我正在使用JBPM6.5.0Final和Postgres数据库连接。当我尝试通过jbpm-workbench容器启动时,会出现以下错误: 而且还有 提前谢了。