gpt4 book ai didi

Django:RunSQL:使用 PostgreSQL COPY 命令

转载 作者:行者123 更新时间:2023-11-29 11:16:20 25 4
gpt4 key购买 nike

我尝试使用以下 RunSQL 命令运行迁移:

class Migration(migrations.Migration):
operations = [
RunSQL(
r'''
COPY auth_group (id, name) FROM stdin;
1 TEST-GROUP
\.
''')]

失败是这样的:

File "/home/foo/local/lib/python2.7/site-packages/django/db/backends/utils.py", line 63, in execute
return self.cursor.execute(sql)
django.db.utils.ProgrammingError: syntax error at or near "1"
LINE 3: 1 TEST-GROUP

是否RunSQL中不允许COPY

我们使用 psycopg2

最佳答案

psycopg2 驱动程序公开了 copy_tocopy_from 方法,可用于实现与 psql 相同的行为> 客户;关键是使用 RunPython 操作而不是 RunSQL 操作。

你需要:

  • 迁移中用于打开文件并与复制方法交互的函数
  • 迁移的 operations 列表中的 RunPython 操作以调用该函数

示例,使用 Django 1.8.4、Python 2.7.10、psycopg2 2.6.1 -

from django.db import models, migrations

def forwards(apps, schema_editor):
with open('./path/to/file.csv', 'r') as infile:
with schema_editor.connection.cursor() as stmt:
#for finer control, use copy_expert instead
stmt.copy_from(infile, 'your_table', sep=',')

class Migration(migrations.Migration):

dependencies = [
]

operations = [
#this runs your function
migrations.RunPython(forwards)
]

一些注意事项:

  • 传递给copyfile 对象本质上是语句中的STDIN
  • 复制命令可以对列进行挑剔;使用 copy_expert 您可以控制所有与命令相同的选项:格式、标题、定界符等。

有关 copy_* 方法的更多信息,请查看 psycopg2 文档:http://initd.org/psycopg/docs/cursor.html

关于Django:RunSQL:使用 PostgreSQL COPY 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31875709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com